Python中的匿名函式
阿新 • • 發佈:2022-04-17
在Python中,有時候我們需要一個簡單的函式去返回一些結果,但是我們又不想通過 def
專門去定義函式再引用,這種情況下有沒有好的辦法來完成呢?
答案是使用匿名函式,而Python中的匿名函式通過 lambda
表示式來完成。
匿名函式的使用
當我們使用匿名函式時, lambda
只是一個表示式,它並不是一個程式碼塊,比如我們使用 map()
函式 和 lambda
來實現計算一個數的平方:
>>> list(map(lambda x: x * x, [1, 2, 3, 4]))
[1, 4, 9, 16]
在上面的 lambda
表示式中,我們並沒有給其定義函式名,但其仍然能夠正常執行。也就是說,我們在這裡定義的是一個匿名函式:lambda x: x * x
lambda x
是匿名函式的宣告部分,而 x * x
則是匿名函式的實現部分,且不需要寫 return
語句。它其實等價於下面這個普通函式:
def demo1(x):
return x * x
我們把這個匿名函式作為一個引數傳遞給 map()
,而 map()
中會把它看作一個和普通函式一樣的函式,從而進一步進行處理。同理,我們還可以把匿名函式賦值給一個變數,然後通過變數來呼叫函式,請看下面的例子:
a, b = 10, 20
sum = lambda x, y: x + y
print(sum)
print(sum(a, b))
執行結果如下:
<function <lambda> at 0x000001F18AC9C268> 30
可以發現,上面的 sum
就是一個匿名函式,我們並沒有寫 return
語句,但依然能夠返回結果。lambda x, y
是匿名函式的宣告部分,而 x + y
則是匿名函式的實現部分。它其實等價於下面這個普通函式:
def demo2(x, y):
return x + y
匿名函式和普通函式的區別
我們使用匿名函式時,一行程式碼就能夠搞定了,那是不是所有的普通函式都應該替換成匿名函式呢?
答案肯定是不行的,儘管我們使用 lambda
表示式來定義簡單的函式,但它的使用具有一定的侷限性。匿名函式和普通函式之間,主要有以下幾點區別:
- 定義普通函式時,必須要有函式名標識,而匿名函式則不需要有函式名來標識;
- 普通函式中的函式體實現部分,可以有多條語句,而匿名函式則只能是一個表示式;
- 普通函式可以用於實現很複雜的功能邏輯處理,而匿名函式一般用於實現一些簡單的功能;
- 如果函式可能會被多次呼叫時,最好使用普通函式,在非多次呼叫的情況下才建議使用匿名函式。