匿名函數,顧名思義即沒有名稱的函數,和def定義的函數的最大區別在于匿名函數創建后返回函數本身(即匿名函數不需要return來返回值),表達式本身結果就是返回值,而def創建后則賦值給一個變量名,在Python中,我們利用關鍵詞lambda創建匿名函數,以下是匿名函數lambda表達式的形式:
lambda arg1,arg2,.....argn:expression
以下為一些lambda的特點:
- lambda 是一個表達式,而不是一個語句,即我們可以在任何可以使用表達式的場景一樣使用lambda。
- lambda 的主體也是一個表達式,即和def定義的函數一樣,lambda也有函數主體,不過lambda的主體僅僅是一個表達式,所以其使用的功能受到較大的限制。
閑話少說,言歸正傳,還是栗子來的比較實惠:
匿名函數使用:
1 # python3 2 3 test1 = lambda :True 4 # 切記這個是個函數,要加括號 5 print (test1()) 6 7 test2 = lambda x: x + 1 8 print (test2(2 )) 9 10 test3 = ( lambda x, y: x + y)(3,4 ) 11 # 切記默認參數已經加了,這里不需要加括號 12 print (test3)
? 測試結果:
True
3
7
? ?項目實戰:
最近運行一段函數的時候,出現一個錯誤:
t.timeout.connect(self.updateData())
TypeError: argument 1 has unexpected type 'NoneType'
修正結果:
?t.timeout.connect(lambda:self.updateData())
即可,原因是什么呢?
個人理解,這里使用了匿名函數可以的原因是這兩個是不同的函數了,因為connect連接的是一個返回值,而self.updateData() 返回的是一個函數的返回值,是沒有值,所以會上報這個錯誤,
這里還有一個解決方法,就是這樣寫也行了:
t.timeout.connect(self.updateData)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
