Python基礎語法之 Lambda

2021-08-05 20:34:21 字數 1841 閱讀 1858

表示式及定義

lambda [ arg1 [arg2, arg3, … argn] ] : expression 

– 《python核心程式設計》

從《python核心程式設計》書本中包含了以上lambda表示式的表述。也就是說在lambda右側的式子中,冒號左邊的為引數值,右邊的為計算表示式。

例項說明

1.**單層引數求和 **

現在假設需要對兩個數進行求和運算。對於正常的邏輯**,不難寫出如下**:

def sum(x, y):

return x + y

而在lambda中,我們可以這樣來寫:

p = lambda x, y: x + y
**簡潔了許多,可是因為缺少方法名對此步操作進行描述,也讓我們對這個求和的lambda表示式有一些疑問,也就是它在程式中目的是什麼,我們難以揣測。

2.**巢狀引數求和 **

需求還是之前的需求,可是我們在對引數的傳遞發生了變化。什麼叫作巢狀引數,我們可以參考如下**:

注:下面的一段**實際上是存在語法錯誤的,此**的目的純粹只是為了說明問題。請勿模仿

def sum_outer(x=0):

def sum_inner(y):

return x + y

採用lambda改寫後的**如下:

def test_lamdba2(x=0):

return lambda y: x + y

而兩種**邏輯的轉換關係如下:

3.**巢狀lambda **

前面假想了一種方法內部巢狀方法的情況。我們說lambda就是理解成在方法內部巢狀了乙個「表示式方法」。所以,還可以能上面進行一層lambda的方法進行改寫。將**中的方法test_lambda2改寫成lambda。改寫後的描述如下圖所示:

將上圖所示的轉換過程與之前的轉換進行乙個分析,可以得到乙個結論,在lambda的表示式中,前面的lambda為外層方法,後續lambda則為次外層方法,並以次由外向內遞推。

變數作用域說明

關於變數在lambda中的作用域從上面的幾幅圖中也可以看出一二來,主要可以做出以下幾點的總結:

對區域性變數可見

對全域性變數可見

對當前層傳入的引數可見

對上層函式傳入的引數可見

對上層lambda傳入的引數可見

lambda評價

優點

在普通**裡幾行的**,在lambda中只需要一行就可以解決。所以**比以前更簡潔了

可以在某乙個方法內部定義,這樣可以提高操作的便捷性

缺點

lambda是乙個匿名函式,因為是匿名,所以可讀性變差了

有時候有多個lambda巢狀(就像例項中的第3點一樣),讓程式變得難以理解

ref

《python核心程式設計》

《python學習手冊》

一 python 基礎之基礎語法

大駝峰 myname leon 小駝峰 myname amy my name jack 建議 變數名或者檔名使用下劃線命名方式,類名使用大駝峰命名方式1,2,3,4,5 寫在 裡面 eg leon 乙個布林值只有true false兩種 不是能理解為0,它是乙個特殊值 list 列表 是 pytho...

Python 基本資料型別基礎實戰 Lambda

reference reference python程式設計基礎 第2版 lambda效率不及operator 冒號前是輸入引數,冒號後是返回值 add lambda x,y x y print add 2,5 g lambda x,y 2,z 6 x y z print g 10 wrong ex...

python入門之基礎語法

1.python的編碼 預設情況下,python 3 原始碼檔案以 utf 8 編碼,所有字串都是 unicode 字串 指定編碼 允許在原始檔中使用 windows 1252 字符集中的字元編碼 coding cp 1252 2.python識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號...