在 Python 中,我們使用 def
語句來定義函數(shù),比如:
def double(x):
return 2 * x
除了用上面的方式定義函數(shù),Python 還提供了一個(gè)關(guān)鍵字 lambda
,讓我們可以創(chuàng)建一個(gè)匿名函數(shù),也就是沒有名稱的函數(shù)。它的形式如下:
lambda 參數(shù): 表達(dá)式
關(guān)鍵字 lambda
說明它是一個(gè)匿名函數(shù),冒號(hào) :
前面的變量是該匿名函數(shù)的參數(shù),冒號(hào)后面是函數(shù)的返回值,注意這里不需使用 return 關(guān)鍵字。
我們將上面的 double
函數(shù)改寫成一個(gè)匿名函數(shù),如下:
lambda x: 2 * x
那怎么調(diào)用匿名函數(shù)呢?可以直接這樣使用:
>>> (lambda x: 2 * x)(8)
16
由于匿名函數(shù)本質(zhì)上是一個(gè)函數(shù)對(duì)象,也可以將其賦值給另一個(gè)變量,再由該變量來調(diào)用函數(shù),如下:
>>> f = lambda x: 2 * x # 將匿名函數(shù)賦給變量 f
>>> f
<function <lambda> at 0x7f835a696578>
>>> f(8)
16
lambda
函數(shù)一般適用于創(chuàng)建一些臨時(shí)性的,小巧的函數(shù)。比如上面的 double
函數(shù),我們當(dāng)然可以使用 def
來定義,但使用 lambda
來創(chuàng)建會(huì)顯得很簡(jiǎn)潔,尤其是在高階函數(shù)的使用中。
看一個(gè)例子:
def func(g, arr):
return [g(x) for x in arr]
現(xiàn)在給一個(gè)列表 [1, 2, 3, 4],利用上面的函數(shù),對(duì)列表中的元素加 1,返回一個(gè)新的列表,你可能這樣用:
def add_one(x):
return x + 1
arr = func(add_one, [1, 2, 3, 4])
這樣做沒什么錯(cuò),可是 add_one
這個(gè)函數(shù)太簡(jiǎn)單了,使用 def
定義未免有點(diǎn)小題大作,我們改用 lambda
:
arr = func(lambda x: x + 1, [1, 2, 3, 4])
是不是很簡(jiǎn)潔、易懂?