Python和lambda函数

时间:2013-04-24 13:23:01

标签: python python-2.7 lambda

可能看起来像一个小问题(myabe),但为什么python表现得那样:

>>>a = []
>>>for i in xrange(5):
...    a.append(lambda: i + 1)

>>>a[0]()
5
>>>a[1]()
5
>>>a[2]()
5
>>>a[3]()
5
>>>a[4]()
5

当存在不同的函数时:

>>aaa
[<function <lambda> at 0x100499d70>, <function <lambda> at 0x100499e60>, <function <lambda> at 0x100499ed8>, <function <lambda> at 0x100499de8>, <function <lambda> at 0x10049f050>]

或者我错过了python docs中非常重要的东西?

1 个答案:

答案 0 :(得分:6)

闭包建立在i的值上,最终为4

如果你想将i保留在lambda中,你可以使用默认变量。

>>>for i in xrange(5):
...    a.append(lambda x=i: x + 1)