1. 程式人生 > >Python的程序結構[4] -> 函數/Function -> 匿名函數

Python的程序結構[4] -> 函數/Function -> 匿名函數

str 命名 turn .cn soft mil 叠代 blog html

匿名函數 / Anonymous Function


匿名函數是一種不需要綁定函數名的函數 (i.e. functions that are not bound to a name)。匿名函數通過 lambda 表達式進行構建。常用於快速建立起一個(一次性的)函數。

Note: lambda 是 Python 的一個表達式/關鍵字,類似 return,並非一個函數,而是能夠生成匿名函數。

關於匿名函數的使用,可以用下面的方式,直接使用,

1 # Use directly
2 f = lambda x: x+1
3 def foo(x): return x
4 print(f type is:
, type(f), foo type is:, type(foo))

lambda 所生成的函數可以直接使用,此時可能有違匿名函數的概念,當 lambda 函數通過 lambda 表達式定義後,需要調用時由於函數匿名因此需要將其賦予某個變量,通過變量名進行調用,此時實際上已經對匿名函數進行了命名,因此與匿名的概念有所相違。

f type is: <class function> foo type is: <class function>

但直接使用並不是匿名函數的最佳使用方式,lambda 生成的匿名函數最佳的使用場景應該是當一個函數需要一個簡單臨時函數

作為輸入參數的時候,使用 lambda 生成匿名函數可以免去為這個中間函數進行定義命名的過程。例如使用 map 對可叠代對象的所有值進行平方的時候,用匿名函數完成平方計算便十分方便。

# Use as a calculate func in other function
print(list(map(lambda x: x*x, [1, 2, 3, 4])))

同時,匿名函數也可以用在當需要 return 一個函數的場景下,免去對函數的命名。

1 # Use as a return func in other function
2 def foo(n): return lambda x: n+x
3 print(foo(n)(x))

Python的程序結構[4] -> 函數/Function -> 匿名函數