表示式及定義
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識別符號 第乙個字元必須是字母表中字母或下劃線 識別符號...