我有一系列函数,例如:>>> 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
繁星淼淼
TA贡献1775条经验 获得超11个赞
在Python中,闭包不捕获实际值,而是捕获名称空间。因此,当您i在函数内部使用时,实际上是在封闭范围内查找的。并且那里的价值已经改变。
您不需要所有这些lambda和列表都可以看到此内容。
>>> x = 1
>>> def f():
... print(x)
...
>>> x = 2
>>> def g():
... print(x)
...
>>> g()
2
>>> f()
2
添加回答
举报
0/150
提交
取消