網(wǎng)站首頁(yè) 編程語(yǔ)言 正文
在Python中,不通過(guò)def來(lái)聲明函數(shù)名字,而是通過(guò)lambda關(guān)鍵字來(lái)定義的函數(shù)稱(chēng)為匿名函數(shù)
關(guān)鍵字lambda表示匿名函數(shù)
語(yǔ)法
lambda 參數(shù):表達(dá)式
先寫(xiě)lambda關(guān)鍵字,然后依次寫(xiě)匿名函數(shù)的參數(shù),多個(gè)參數(shù)中間用逗號(hào)連接,然后是一個(gè)冒號(hào),冒號(hào)后面寫(xiě)返回的表達(dá)式
lambda函數(shù)比普通函數(shù)更簡(jiǎn)潔
匿名函數(shù)有個(gè)好處:函數(shù)沒(méi)有名字,不必?fù)?dān)心函數(shù)名沖突
匿名函數(shù)與普通函數(shù)的對(duì)比 :
def sum_func(a, b, c): return a + b + c sum_lambda = lambda a, b, c: a + b + c print(sum_func(1, 10, 100)) # 111 print(sum_lambda(1, 10, 100)) # 111
可以看到,lambda適用于多個(gè)參數(shù)、一個(gè)返回值的情況(匿名函數(shù)有個(gè)限制,就是只能有一個(gè)表達(dá)式,不用寫(xiě)return,返回值就是該表達(dá)式的結(jié)果),可以用一個(gè)變量來(lái)接收,變量是一個(gè)函數(shù)對(duì)象,執(zhí)行這個(gè)函數(shù)對(duì)象的結(jié)果與執(zhí)行一個(gè)普通函數(shù)的結(jié)果是一樣的
匿名函數(shù)的多種形式:
#無(wú)參數(shù) lambda_a = lambda: 100 print(lambda_a()) # 100 #一個(gè)參數(shù) lambda_b = lambda num: num * 10 print(lambda_b(5)) # 50 #多個(gè)參數(shù) lambda_c = lambda a, b, c, d : a + b + c + d print(lambda_c(1,2,3,4)) # 10 #表達(dá)式分支 lambda_d = lambda x: x if x % 2 == 0 else x + 1 print(lambda_d(6)) # 6 print(lambda_d(7)) # 8
可以看到,lambda的參數(shù)可以0個(gè)到多個(gè),并且返回的表達(dá)式可以是一個(gè)復(fù)雜的表達(dá)式,只要最后的值是一個(gè)值就行了
此外,匿名函數(shù)也是一個(gè)函數(shù)對(duì)象,也可以把匿名函數(shù)賦值給一個(gè)變量,再利用變量來(lái)調(diào)用該函數(shù):
f = lambda x: x * x print(f) # <function <lambda> at 0x00000253B601B598> print(f(5)) # 25
lambda作為一個(gè)參數(shù)傳遞
def sub_func(a, b, func): print('a =', a) print('b =', b) print('a - b =',func(a, b)) sub_func(100, 1, lambda a, b: a - b) #a = 100 #b = 1 #a - b = 99
lambda作為函數(shù)的返回值
def func(a, b): return lambda c: a + b + c return_func = func(1, 10) print(return_func) # <function func.<locals>.<lambda> at 0x00000253B6472D90> print(return_func(100)) # 111
匿名函數(shù)可以作為一個(gè)函數(shù)的返回值
在上面的代碼中,func返回的是一個(gè)匿名函數(shù),返回的是一個(gè)函數(shù)對(duì)象,當(dāng)我們執(zhí)行這個(gè)函數(shù)時(shí),可以得到lambda函數(shù)的結(jié)果
注意:其中的a,b兩個(gè)參數(shù)是func中的參數(shù),但我們執(zhí)行返回的函數(shù)return_func時(shí),已經(jīng)不在func的作用域內(nèi)了,而lambda函數(shù)仍然能使用a,b參數(shù),說(shuō)明lambda函數(shù)會(huì)將它的運(yùn)行環(huán)境保存一份,一直保留到它自己執(zhí)行的時(shí)候使用
原文鏈接:https://blog.csdn.net/Hudas/article/details/122850338
相關(guān)推薦
- 2022-03-22 C++實(shí)現(xiàn)轉(zhuǎn)置矩陣的循環(huán)(矩陣轉(zhuǎn)置函數(shù))
- 2022-12-01 Go?sync?WaitGroup使用深入理解_Golang
- 2023-03-15 Pandas中字符串和時(shí)間轉(zhuǎn)換與格式化的實(shí)現(xiàn)_python
- 2022-10-17 Net?core中使用System.Drawing對(duì)上傳的圖片流進(jìn)行壓縮(示例代碼)_實(shí)用技巧
- 2022-11-18 redis批量操作pipeline管道操作方法_Redis
- 2022-12-14 Qt設(shè)置窗體(QWidget)透明度的方法總結(jié)_C 語(yǔ)言
- 2023-05-19 Kotlin?Suspend掛起函數(shù)的使用詳解_Android
- 2022-12-10 深入分析React源碼中的合成事件_React
- 最近更新
-
- 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)證過(guò)濾器
- Spring Security概述快速入門(mén)
- 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)程分支