14.在Python中lambda函數是什麼

在Python中lambda函數是什麼?

It is a single expression anoymous function often used as inline function.javascript

 

lambda 匿名函數

表達式及定義

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

  1. 對局部變量可見
  2. 對全局變量可見
  3. 對當前層傳入的參數可見
  4. 對上層函數傳入的參數可見
  5. 對上層Lambda傳入的參數可見

Lambda評價

優勢

  1. 在普通代碼裏幾行的代碼,在Lambda中只須要一行就能夠解決。因此代碼比之前更簡潔了
  2. 能夠在某一個方法內部定義,這樣能夠提升操做的便捷性

缺點

  1. Lambda是一個匿名函數,由於是匿名,因此可讀性變差了
  2. 有時候有多個Lambda嵌套(就像實例中的第3點同樣),讓程序變得難以理解

補充:對象

當咱們在傳入函數時,有些時候,不須要顯式地定義函數,直接傳入匿名函數更方便。

在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對匿名函數的支持有限,只有一些簡單的狀況下可使用匿名函數。

相關文章
相關標籤/搜索