簡體   English   中英

lambda函數和Python中的函數列表

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM