[英]lambda functions and list of functions in Python
我有一系列函數,例如:
>>> 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]是一樣的?
那是因為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
必須閱讀: (lambda)函數閉包捕獲了什么?
在Python中,閉包不捕獲實際值,而是捕獲名稱空間。 因此,當你在函數中使用i
時,它實際上是在封閉范圍中查找的。 那里的價值已經發生了變化。
你不需要所有這些lambda
和列表來看到這一點。
>>> x = 1
>>> def f():
... print(x)
...
>>> x = 2
>>> def g():
... print(x)
...
>>> g()
2
>>> f()
2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.