lambda函数和Python中的函数列表

Ego*_*rev 2 python lambda

我有一系列函数,例如:

>>> def f():
...     print "f"
... 
>>> def g():
...     print "g"
... 
>>> c=[f,g]
Run Code Online (Sandbox Code Playgroud)

然后我尝试创建两个lambda函数:

>>> i=0
>>> x=lambda: c[i]()
>>> i+=1
>>> y=lambda: c[i]()
Run Code Online (Sandbox Code Playgroud)

然后,打电话给他们:

>>> x()
g
>>> y()
g
Run Code Online (Sandbox Code Playgroud)

为什么lambda中的c [i]是一样的?

Ash*_*ary 10

那是因为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
Run Code Online (Sandbox Code Playgroud)

必须阅读: (lambda)函数闭包捕获了什么?