It is a single expression anoymous function often used as inline function.javascript
lambda [ arg1 [arg2, arg3, … argN] ] : expression css
在lambda右側的式子中,冒號左邊的爲參數值,右邊的爲計算表達式。java
1.單層參數求和
如今假設須要對兩個數進行求和運算。對於正常的邏輯代碼,不難寫出以下代碼:python
def sum(x, y): return x + y
而在lambda中,咱們能夠這樣來寫:express
p = lambda x, y: x + y
代碼簡潔了許多,但是由於缺乏方法名對此步操做進行描述,也讓咱們對這個求和的Lambda表達式有一些疑問,也就是它在程序中目的是什麼,咱們難以揣測。 函數
2.嵌套參數求和
需求仍是以前的需求,但是咱們在對參數的傳遞發生了變化。ui
def fun1(): return lambda x,y:print(x+y) fun1()(1,2) #輸出3
3.嵌套lambda
前面假想了一種方法內部嵌套方法的狀況。咱們說Lambda就是理解成在方法內部嵌套了一個「表達式方法」。因此,還能夠能上面進行一層Lambda的方法進行改寫。將代碼中的方法test_lambda2改寫成lambda。
將上圖所示的轉換過程與以前的轉換進行一個分析,能夠獲得一個結論,在lambda的表達式中,前面的lambda爲外層方法,後續lambda則爲次外層方法,並以次由外向內遞推。spa
關於變量在Lambda中的做用域,主要能夠作出如下幾點的總結:code
補充:對象
當咱們在傳入函數時,有些時候,不須要顯式地定義函數,直接傳入匿名函數更方便。
在Python中,對匿名函數提供了有限支持。仍是以map()
函數爲例,計算f(x)=x2時,除了定義一個f(x)
的函數外,還能夠直接傳入匿名函數:
>>> 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: x * x
實際上就是:
def f(x): return x * x
關鍵字lambda
表示匿名函數,冒號前面的x
表示函數參數。
匿名函數有個限制,就是隻能有一個表達式,不用寫return
,返回值就是該表達式的結果。
用匿名函數有個好處,由於函數沒有名字,沒必要擔憂函數名衝突。此外,匿名函數也是一個函數對象,也能夠把匿名函數賦值給一個變量,再利用變量來調用該函數:
>>> f = lambda x: x * x
>>> f
<function <lambda> at 0x101c6ef28> >>> f(5) 25
一樣,也能夠把匿名函數做爲返回值返回,好比:
def build(x, y): return lambda: x * x + y * y
Python對匿名函數的支持有限,只有一些簡單的狀況下可使用匿名函數。