1. 程式人生 > >python之匿名函數lambda

python之匿名函數lambda

lambda

lambda parameter:expression

其中lambda是聲明一個匿名函數,parameter是這個函數有參數,可以有多少,中間用逗號隔開,expression是正則表達式

def compute(a,b,func):
    result = func(a,b)
    return result
num = compute(11,12,lambda x,y:x+y)
print(num)

方法compute有三個參數,從封裝的代碼中可以看到,compute把第三個參數用函數傳入,再看代碼的第四行,表達式是x+y,所以func參數的內容就是x+y,且需要傳入兩個參數分別為x,y,再看看第二行代碼中傳入兩個參數是a,b,那麽result = a + b,因為a = 11,b = 12,所以result等於23,所以num等於23,打印結果也就是23

下面做一下延伸:

def compute(a,b,func):
    result = func(a,b)
    return result
func_new = input("請輸入一個匿名函數:")
num = compute(11,12,func_new)
print(num)

上面的代碼就是說讓我們輸入一個函數,這樣的話,你想讓它實現加法,它就加法。想讓它實現減法就實現減法。

不過它只能在2.7版本才可以用上面的代碼,3.6的話就不行,因為input會把你輸入的值都變成客串,也就是"lambda x,y:x+y",你讓一個字符串去實現這個,不是搞笑嗎?這時候我們就可以用到eval函數,這個函數很強大。它可以去除這字符串,讓它變成一個可以被調用的函數,如下代碼

def compute(a,b,func):
    result = func(a,b)
    return result
func_new = input("請輸入一個匿名函數:")
func_new = eval(func_new)
num = compute(11,12,func_new)
print(num)


本文出自 “愛周瑜” 博客,請務必保留此出處http://izhouyu.blog.51cto.com/10318932/1967315

python之匿名函數lambda