1. 程式人生 > >Python——匿名函式

Python——匿名函式

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]