亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

lambda函數和Python中的函數列表

lambda函數和Python中的函數列表

慕容森 2021-03-07 09:09:23
我有一系列函數,例如:>>> def f():...     print "f"... >>> def g():...     print "g"... >>> c=[f,g]然后,我嘗試創建兩個lambda函數:>>> i=0>>> x=lambda: c[i]()>>> i+=1>>> y=lambda: c[i]()然后,給他們打電話:>>> x()g>>> y()g為什么lambda中的c [i]是相同的?
查看完整描述

2 回答

?
慕哥9229398

TA貢獻1877條經驗 獲得超6個贊

這是因為lambda函數i在運行時獲取全局變量的值:


>>> i = 0

>>> x=lambda z = i : c[z]() #assign the current value of `i` to a local variable inside lambda

>>> i+=1

>>> y =lambda z = i : c[z]()

>>> x()

f

>>> y()

g


查看完整回答
反對 回復 2021-03-27
?
繁星淼淼

TA貢獻1775條經驗 獲得超11個贊

在Python中,閉包不捕獲實際值,而是捕獲名稱空間。因此,當您i在函數內部使用時,實際上是在封閉范圍內查找的。并且那里的價值已經改變。


您不需要所有這些lambda和列表都可以看到此內容。


>>> x = 1

>>> def f():

...   print(x)

...

>>> x = 2

>>> def g():

...   print(x)

...

>>> g()

2

>>> f()

2


查看完整回答
反對 回復 2021-03-27
  • 2 回答
  • 0 關注
  • 187 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號