lambda函数和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]是相同的?


慕容森
浏览 168回答 2
2回答

慕哥9229398

这是因为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

繁星淼淼

在Python中,闭包不捕获实际值,而是捕获名称空间。因此,当您i在函数内部使用时,实际上是在封闭范围内查找的。并且那里的价值已经改变。您不需要所有这些lambda和列表都可以看到此内容。>>> x = 1>>> def f():...   print(x)...>>> x = 2>>> def g():...   print(x)...>>> g()2>>> f()2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python