日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

关于python中lambda函数的描述_关于Python中的lambda函数

發(fā)布時間:2025/3/15 python 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于python中lambda函数的描述_关于Python中的lambda函数 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

lambda是Python編程語言中使用頻率較高的一個關(guān)鍵字。那么,什么是lambda?它有哪些用法?網(wǎng)上的文章汗牛充棟,可是把這個講透的文章卻不多。這里,我們通過閱讀各方資料,總結(jié)了關(guān)于Python中的lambda的“一個語法,三個特性,四個用法,一個爭論”。歡迎閱讀和溝通(個人微信: slxiaozju)。

由于文章是從我的公眾號上復(fù)制過來的,因此排版不整齊,但是內(nèi)容絕對充實,歡迎關(guān)注公眾號[測試不將就],閱讀原文

一個語法

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

lambda?argument_list: expression

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

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

......

2. 這里的expression是一個關(guān)于參數(shù)的表達(dá)式。表達(dá)式中出現(xiàn)的參數(shù)需要在argument_list中有定義,并且表達(dá)式只能是單行的。以下都是合法的表達(dá)式:

1

None

a + b

sum(a)

1 if a >10 else 0

......

3.? 這里的lambda argument_list: expression表示的是一個函數(shù)。這個函數(shù)叫做lambda函數(shù)。

三個特性

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

lambda函數(shù)是匿名的:所謂匿名函數(shù),通俗地說就是沒有名字的函數(shù)。lambda函數(shù)沒有名字。

lambda函數(shù)有輸入和輸出:輸入是傳入到參數(shù)列表argument_list的值,輸出是根據(jù)表達(dá)式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ù)必須能夠進(jìn)行加法運算)

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ù)替換。

例如,為了把標(biāo)準(zhǔn)庫time中的函數(shù)sleep的功能屏蔽(Mock),我們可以在程序初始化時調(diào)用:time.sleep=lambda x:None。這樣,在后續(xù)代碼中調(diào)用time庫的sleep函數(shù)將不會執(zhí)行原有的功能。例如,執(zhí)行time.sleep(3)時,程序不會休眠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ǔ),在這里我們不展開。

4. 將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ù)用于指定對列表中所有元素進(jìn)行排序的準(zhǔn)則。例如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距離從小到大進(jìn)行排序,其結(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意見不一致。

支持方認(rèn)為使用lambda編寫的代碼更緊湊,更“pythonic”。

反對方認(rèn)為,lambda函數(shù)能夠支持的功能十分有限,其不支持多分支程序if...elif...else...和異常處理程序try ...except...。并且,lambda函數(shù)的功能被隱藏,對于編寫代碼之外的人員來說,理解lambda代碼需要耗費一定的理解成本。他們認(rèn)為,使用for循環(huán)等來替代lambda是一種更加直白的編碼風(fēng)格。

關(guān)于lambda的爭執(zhí)沒有定論。在實際中,是否使用lambda編程取決于程序員的個人喜好。

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

總結(jié)

以上是生活随笔為你收集整理的关于python中lambda函数的描述_关于Python中的lambda函数的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。