網(wǎng)站首頁 編程語言 正文
最近碰見太多次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
相關(guān)推薦
- 2022-04-22 golang數(shù)據(jù)類型【字符類型】以及fmt的輸出輸入、UTF-8 和 Unicode 有何區(qū)別?
- 2022-06-29 在Oracle中使用正則表達(dá)式_oracle
- 2022-11-02 一文搞懂Golang中的內(nèi)存逃逸_Golang
- 2022-03-29 C#加密知識(shí)整合?(AES,MD5,RSA,SHA256)_C#教程
- 2022-09-06 Go?語言選擇器實(shí)例教程_Golang
- 2022-10-10 react使用axios實(shí)現(xiàn)上傳下載功能_React
- 2022-04-20 python+appium自動(dòng)化測(cè)試之如何控制App的啟動(dòng)和退出_python
- 2022-11-28 Kotlin的Collection與Sequence操作異同點(diǎn)詳解_Android
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支