深入理解Lambda
概述
Lambda是一個表達式,也可以說它是一個匿名函數。然而在使用它或是閱讀Lambda代碼的時候,卻顯得并不那么容易。因為它匿名,因為它刪減了一些必要的說明信息(比如方法名)。下面就來說說Lambda是如何進行轉換和工作的吧。
版權說明
著作權歸作者所有。
商業轉載請聯系作者獲得授權,非商業轉載請注明出處。
作者:Q-WHai
發表日期: 2016年3月10日
鏈接:https://qwhai.blog.csdn.net/article/details/50774827
來源:CSDN
更多內容:分類 >> Thinking In Python
目錄
文章目錄
- 概述
- 版權說明
- 目錄
- @[toc]
- Lambda
- 初步認識
- 表達式及定義
- 實例說明
- 變量作用域說明
- Lambda評價
- 優點
- 缺點
- Ref
- 征集
- @[toc]
- 初步認識
- 表達式及定義
- 實例說明
- 變量作用域說明
- Lambda評價
- 優點
- 缺點
Lambda
初步認識
表達式及定義
lambda [ arg1 [arg2, arg3, … argN] ] : expression
– 《Python核心編程》
從《Python核心編程》書本中包含了以上lambda表達式的表述。也就是說在lambda右側的式子中,冒號左邊的為參數值,右邊的為計算表達式。
實例說明
1.單層參數求和
現在假設需要對兩個數進行求和運算。對于正常的邏輯代碼,不難寫出如下代碼:
而在lambda中,我們可以這樣來寫:
p = lambda x, y: x + y代碼簡潔了許多,可是因為缺少方法名對此步操作進行描述,也讓我們對這個求和的Lambda表達式有一些疑問,也就是它在程序中目的是什么,我們難以揣測。
2.嵌套參數求和
需求還是之前的需求,可是我們在對參數的傳遞發生了變化。什么叫作嵌套參數,我們可以參考如下代碼:
注:下面的一段代碼實際上是存在語法錯誤的,此代碼的目的純粹只是為了說明問題。請勿模仿
采用lambda改寫后的代碼如下:
def test_lamdba2(x=0):return lambda y: x + y而兩種代碼邏輯的轉換關系如下:
3.嵌套lambda
前面假想了一種方法內部嵌套方法的情況。我們說Lambda就是理解成在方法內部嵌套了一個“表達式方法”。所以,還可以能上面進行一層Lambda的方法進行改寫。將代碼中的方法test_lambda2改寫成lambda。改寫后的描述如下圖所示:
將上圖所示的轉換過程與之前的轉換進行一個分析,可以得到一個結論,在lambda的表達式中,前面的lambda為外層方法,后續lambda則為次外層方法,并以次由外向內遞推。
變量作用域說明
關于變量在Lambda中的作用域從上面的幾幅圖中也可以看出一二來,主要可以做出以下幾點的總結:
Lambda評價
優點
缺點
Ref
- 《Python核心編程》
- 《Python學習手冊》
征集
如果你也需要使用ProcessOn這款在線繪圖工具,可以使用如下邀請鏈接進行注冊:
https://www.processon.com/i/56205c2ee4b0f6ed10838a6d
總結
以上是生活随笔為你收集整理的深入理解Lambda的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java设计模式——迭代器模式
- 下一篇: 排序算法系列:插入排序算法