Python——匿名函式
阿新 • • 發佈:2019-01-03
python 使用 lambda 來建立匿名函式。
所謂匿名,即不再使用 def 語句這樣標準的形式定義一個函式。
- lambda 只是一個表示式,函式體比 def 簡單很多。
- lambda 的主體是一個表示式,而不是一個程式碼塊。僅僅能在 lambda 表示式中封裝有限的邏輯進去。
- lambda 函式擁有自己的名稱空間,且不能訪問自己引數列表之外或全域性名稱空間裡的引數。
- 雖然 lambda 函式看起來只能寫一行,卻不等同於C或C++的行內函數,後者的目的是呼叫小函式時不佔用棧記憶體從而增加執行效率。
語法
lambda [arg1 [,arg2,.....argn]] : expression
lambda
:定義匿名函式的關鍵字arg1...argn
:函式的引數列表,引數之間用逗號(,
)分割。expression
:被返回的表示式,且表示式只能有一個(注意: lambda 定義不包含 return 語句)。- lambda 表示式構建的其實是一個函式物件
【例】以 map()
函式為例,計算f(x)=x2
>>> list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9]))
[1, 4, 9, 16, 25, 36, 49, 64, 81]
關鍵字lambda
表示匿名函式,冒號前面的x
表示函式引數。
匿名函式有個限制,就是隻能有一個表示式,不用寫return
,返回值就是該表示式的結果。
用匿名函式有個好處,因為函式沒有名字,不必擔心函式名衝突。此外,匿名函式也是一個函式物件,也可以把匿名函式賦值給一個變數,再利用變數來呼叫該函式:
>>> f = lambda x: x*x
>>> f
<function <lambda> at 0x009C0858>
>>> f(6)
36
也可以把匿名函式作為返回值返回
>>> def func(x , y ): ... return lambda :x*x + y *y ... >>> >>> func(1,3) <function func.<locals>.<lambda> at 0x00A84810> >>> >>> f = func(1,3) >>> f <function func.<locals>.<lambda> at 0x00A84858> >>> f() 10
【例】對列表中所有元素求平方
>>> list1 = list(map( lambda x:x*x , [1, 2, 3, 4, 5, 6, 7, 8, 9]))
>>> list1
[1, 4, 9, 16, 25, 36, 49, 64, 81]