我有一个lambda函数列表,我想按顺序对它们进行求值。但是我不确定为什么,只有最后一个函数会被求值。下面是一个例子:
>>> def f(x,z):
... print "x=",x,", z=",z
...
>>>
>>> g = lambda x : f(x,13)
>>> g(2)
x= 2 , z= 13 # As expected
>>>
>>> lst=[]
>>>
>>> for i in range(0,5):
... lst.append(lambda x: f(x,i))
...
>>> print lst
[<function <lambda> at 0x10341e2a8>, <function <lambda> at 0x10341e398>, <function <lambda> at 0x10341e410>, <function <lambda> at 0x10341e488>, <function <lambda> at 0x10341e500>]
>>>
>>> for fn in lst:
... fn(3)
...
x= 3 , z= 4 # z should be 0
x= 3 , z= 4 # z should be 1
x= 3 , z= 4 # z should be 2
x= 3 , z= 4 # z should be 3
x= 3 , z= 4 # as expected.
我认为只有最后一个被执行了,其他的没有。有什么想法吗?谢谢!