我有一系列函数,例如:
>>> 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] 是一样的?
i
这是因为 lambda 函数在运行时获取全局变量的值:
>>> 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
s 和列表来查看此内容。
>>> x = 1
>>> def f():
... print(x)
...
>>> x = 2
>>> def g():
... print(x)
...
>>> g()
2
>>> f()
2