python中的lambda函數(shù)用法指南
最近碰見太多次lambda函數(shù)了,那就來詳細(xì)解釋一下該函數(shù)。
lambda函數(shù)
我們先對lambda函數(shù)進(jìn)行一個簡單的介紹
- lambda函數(shù)是一種匿名函數(shù),即沒有名字的函數(shù)
- 使用lambda保留字定義,函數(shù)名是返回結(jié)果
- lambda函數(shù)的函數(shù)體只是一個表達(dá)式
- lambda函數(shù)用于定義簡單的、能夠在一行內(nèi)表示的函數(shù)
- lambda表達(dá)式” : “后面,只能有一個表達(dá)式,def則可以有多個。
- lambda一般用來定義簡單的函數(shù),而def可以定義復(fù)雜的函數(shù)
先來看一個例子:
g=lambda x:x+1 print(g(1)) #結(jié)果為2
可以這樣認(rèn)為,lambda作為一個表達(dá)式,定義了一個匿名函數(shù)。等價于:
def g(x): return x+1
非常容易理解,在這里lambda簡化了函數(shù)定義的書寫形式。是代碼更為簡潔,但是使用函數(shù)的定義方式更為直觀,易理解。
可傳入多個參數(shù)
g=lambda x,y,z:x+y+z*2 print(g(1,2,3)) #結(jié)果為9 #也可直接傳遞參數(shù) (lambda x:x**2)(3) #結(jié)果為9
lambda表達(dá)式會返回一個函數(shù)對象,如果沒有變量接受這個返回值的話,它很快就會被丟棄。也正是由于lambda只是一個表達(dá)式,所以它可以直接作為list和dict的成員
list_a = [lambda a: a**3, lambda b: b**3] print(type(list_a[0]))
結(jié)果為:
與map函數(shù)進(jìn)行使用
a = map(lambda x:x**2,range(5)) print(list(a))
結(jié)果為:
補充:一個爭議
事實上,關(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é)
lambda函數(shù)使代碼結(jié)構(gòu)更加緊湊,但卻使代碼看起來不是那么清晰。
參考資料
https://zhuanlan.zhihu.com/p/80960485
到此這篇關(guān)于python中的lambda函數(shù)用法的文章就介紹到這了,更多相關(guān)python中l(wèi)ambda函數(shù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python多項式擬合之np.polyfit 和 np.polyld詳解
這篇文章主要介紹了python多項式擬合之np.polyfit 和 np.polyld的實例代碼,python數(shù)據(jù)擬合主要可采用numpy庫,庫的安裝可直接用pip install numpy等,需要的朋友跟隨小編一起學(xué)習(xí)吧2020-02-02PageFactory設(shè)計模式基于python實現(xiàn)
這篇文章主要介紹了PageFactory設(shè)計模式基于python實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-04-04