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