亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

關(guān)于Python中的lambda,這可能是你見過的最完整的講解

系統(tǒng) 1843 0

lambda是Python編程語言中使用頻率較高的一個關(guān)鍵字。那么,什么是lambda?它有哪些用法?

這里,我們通過閱讀各方資料,總結(jié)了關(guān)于Python中的lambda的“一個語法,三個特性,四個用法,一個爭論”。

一個語法

在Python中,lambda的語法是唯一的。其形式如下:

lambda argument_list: expression

其中,lambda是Python預(yù)留的關(guān)鍵字,argument_list和expression由用戶自定義。具體介紹如下。

關(guān)于Python中的lambda,這可能是你見過的最完整的講解_第1張圖片

這里的argument_list是參數(shù)列表。它的結(jié)構(gòu)與Python中函數(shù)(function)的參數(shù)列表是一樣的。具體來說,argument_list可以有非常多的形式。例如:
a, b
a=1, b=2
*args
**kwargs
a, b=1, *args

......
這里的expression是一個關(guān)于參數(shù)的表達式。表達式中出現(xiàn)的參數(shù)需要在argument_list中有定義,并且表達式只能是單行的。以下都是合法的表達式:
1
None
a + b
sum(a)
1 if a >10 else 0
......
這里的lambda argument_list: expression表示的是一個函數(shù)。這個函數(shù)叫做lambda函數(shù)。

三個特性

lambda函數(shù)有如下特性:

lambda函數(shù)是匿名的:所謂匿名函數(shù),通俗地說就是沒有名字的函數(shù)。lambda函數(shù)沒有名字。
lambda函數(shù)有輸入和輸出:輸入是傳入到參數(shù)列表argument_list的值,輸出是根據(jù)表達式expression計算得到的值。
lambda函數(shù)一般功能簡單:單行expression決定了lambda函數(shù)不可能完成復(fù)雜的邏輯,只能完成非常簡單的功能。由于其實現(xiàn)的功能一目了然,甚至不需要專門的名字來說明。
下面是一些lambda函數(shù)示例:

lambda x, y: x y;函數(shù)輸入是x和y,輸出是它們的積x y
lambda:None;函數(shù)沒有輸入?yún)?shù),輸出是None
lambda *args: sum(args); 輸入是任意個數(shù)的參數(shù),輸出是它們的和(隱性要求是輸入?yún)?shù)必須能夠進行加法運算)
lambda **kwargs: 1;輸入是任意鍵值對參數(shù),輸出是1

四個用法

由于lambda語法是固定的,其本質(zhì)上只有一種用法,那就是定義一個lambda函數(shù)。在實際中,根據(jù)這個lambda函數(shù)應(yīng)用場景的不同,可以將lambda函數(shù)的用法擴展為以下幾種:

將lambda函數(shù)賦值給一個變量,通過這個變量間接調(diào)用該lambda函數(shù)。
例如,執(zhí)行語句add=lambda x, y: x+y,定義了加法函數(shù)lambda x, y: x+y,并將其賦值給變量add,這樣變量add便成為具有加法功能的函數(shù)。例如,執(zhí)行add(1,2),輸出為3。

將lambda函數(shù)賦值給其他函數(shù),從而將其他函數(shù)用該lambda函數(shù)替換。
例如,為了把標準庫time中的函數(shù)sleep的功能屏蔽(Mock),我們可以在程序初始化時調(diào)用:time.sleep=lambda x:None。這樣,在后續(xù)代碼中調(diào)用time庫的sleep函數(shù)將不會執(zhí)行原有的功能。例如,執(zhí)行time.sleep(3)時,程序不會休眠3秒鐘,而是什么都不做。
將lambda函數(shù)作為其他函數(shù)的返回值,返回給調(diào)用者。
函數(shù)的返回值也可以是函數(shù)。例如return lambda x, y: x+y返回一個加法函數(shù)。這時,lambda函數(shù)實際上是定義在某個函數(shù)內(nèi)部的函數(shù),稱之為嵌套函數(shù),或者內(nèi)部函數(shù)。對應(yīng)的,將包含嵌套函數(shù)的函數(shù)稱之為外部函數(shù)。內(nèi)部函數(shù)能夠訪問外部函數(shù)的局部變量,這個特性是閉包(Closure)編程的基礎(chǔ),在這里我們不展開。
將lambda函數(shù)作為參數(shù)傳遞給其他函數(shù)。
部分Python內(nèi)置函數(shù)接收函數(shù)作為參數(shù)。典型的此類內(nèi)置函數(shù)有這些。

filter函數(shù)。此時lambda函數(shù)用于指定過濾列表元素的條件。例如filter(lambda x: x % 3 == 0, [1, 2, 3])指定將列表[1,2,3]中能夠被3整除的元素過濾出來,其結(jié)果是[3]。
sorted函數(shù)。此時lambda函數(shù)用于指定對列表中所有元素進行排序的準則。例如sorted([1, 2, 3, 4, 5, 6, 7, 8, 9], key=lambda x: abs(5-x))將列表[1, 2, 3, 4, 5, 6, 7, 8, 9]按照元素與5距離從小到大進行排序,其結(jié)果是[5, 4, 6, 3, 7, 2, 8, 1, 9]。
map函數(shù)。此時lambda函數(shù)用于指定對列表中每一個元素的共同操作。例如map(lambda x: x+1, [1, 2,3])將列表[1, 2, 3]中的元素分別加1,其結(jié)果[2, 3, 4]。
reduce函數(shù)。此時lambda函數(shù)用于指定列表中兩兩相鄰元素的結(jié)合條件。例如reduce(lambda a, b: '{}, {}'.format(a, b), [1, 2, 3, 4, 5, 6, 7, 8, 9])將列表 [1, 2, 3, 4, 5, 6, 7, 8, 9]中的元素從左往右兩兩以逗號分隔的字符的形式依次結(jié)合起來,其結(jié)果是'1, 2, 3, 4, 5, 6, 7, 8, 9'。
另外,部分Python庫函數(shù)也接收函數(shù)作為參數(shù),例如gevent的spawn函數(shù)。此時,lambda函數(shù)也能夠作為參數(shù)傳入。

一個爭議

事實上,關(guān)于lambda在Python社區(qū)是存在爭議的。Python程序員對于到底要不要使用lambda意見不一致。

支持方認為使用lambda編寫的代碼更緊湊,更“pythonic”。
反對方認為,lambda函數(shù)能夠支持的功能十分有限,其不支持多分支程序if...elif...else...和異常處理程序try ...except...。并且,lambda函數(shù)的功能被隱藏,對于編寫代碼之外的人員來說,理解lambda代碼需要耗費一定的理解成本。他們認為,使用for循環(huán)等來替代lambda是一種更加直白的編碼風(fēng)格。
關(guān)于lambda的爭執(zhí)沒有定論。在實際中,是否使用lambda編程取決于程序員的個人喜好。

以上就是我們總結(jié)的關(guān)于Python中的lambda的“一個語法,三個特性,四個用法,一個爭論”。如有紕漏之處,歡迎批評指正。


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 欧美视频一区二区三区 | 成人在线观看国产 | 成人毛片基地 | 国产成人亚洲影视在线 | 亚洲综合欧美日韩 | 四虎影视成人永久在线播放 | 一区二区三区四区 | 亚洲大片免费 | 国产综合亚洲专区在线 | 日韩有码在线视频 | 国产欧美一区二区三区精品 | 欧美一级毛片图 | 天天干天天草 | 亚洲狠狠| 国内特级毛片 | 欧美激情综合 | 成人a毛片高清视频 | 国产精品久久免费视频 | 亚洲免费视频在线 | 欧美影院一区二区 | 奇米影视777欧美在线观看 | 亚洲 欧美 日韩 在线 | 精品国产区一区二区三区在线观看 | 色资源网站 | 国内精品久久影院 | 久久66热re国产毛片基地 | 婷婷爱五月 | 国产日韩久久久久69影院 | 操一操干一干 | 日本一区色 | 国产第一页福利 | 中国女人精69xxx | 国产精品三| 深夜在线观看网站 | 国模私拍视频在线 | 久久综合九色欧美综合狠狠 | 99热久久精品国产66 | 国产99视频在线 | 在线亚洲观看 | 亚洲精品乱码久久久久久中文字幕 | 久久国产精品免费专区 |