日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學(xué)無先后,達(dá)者為師

網(wǎng)站首頁 編程語言 正文

python中的lambda函數(shù)用法指南_python

作者:柳小蔥 ? 更新時(shí)間: 2023-02-15 編程語言

最近碰見太多次lambda函數(shù)了,那就來詳細(xì)解釋一下該函數(shù)。

lambda函數(shù)

我們先對(duì)lambda函數(shù)進(jìn)行一個(gè)簡(jiǎn)單的介紹

  • lambda函數(shù)是一種匿名函數(shù),即沒有名字的函數(shù)
  • 使用lambda保留字定義,函數(shù)名是返回結(jié)果
  • lambda函數(shù)的函數(shù)體只是一個(gè)表達(dá)式
  • lambda函數(shù)用于定義簡(jiǎn)單的、能夠在一行內(nèi)表示的函數(shù)
  • lambda表達(dá)式” : “后面,只能有一個(gè)表達(dá)式,def則可以有多個(gè)。
  • lambda一般用來定義簡(jiǎn)單的函數(shù),而def可以定義復(fù)雜的函數(shù)

先來看一個(gè)例子:

g=lambda x:x+1
print(g(1))
#結(jié)果為2

可以這樣認(rèn)為,lambda作為一個(gè)表達(dá)式,定義了一個(gè)匿名函數(shù)。等價(jià)于:

def g(x):
    return x+1

非常容易理解,在這里lambda簡(jiǎn)化了函數(shù)定義的書寫形式。是代碼更為簡(jiǎn)潔,但是使用函數(shù)的定義方式更為直觀,易理解。

可傳入多個(gè)參數(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á)式會(huì)返回一個(gè)函數(shù)對(duì)象,如果沒有變量接受這個(gè)返回值的話,它很快就會(huì)被丟棄。也正是由于lambda只是一個(gè)表達(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é)果為:

補(bǔ)充:一個(gè)爭(zhēng)議

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

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

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

總結(jié)

lambda函數(shù)使代碼結(jié)構(gòu)更加緊湊,但卻使代碼看起來不是那么清晰。

參考資料

https://zhuanlan.zhihu.com/p/80960485

原文鏈接:https://blog.csdn.net/weixin_48077303/article/details/115432398

欄目分類
最近更新