在python 2.6中:
[x() for x in [lambda: m for m in [1,2,3]]]
结果是:
[3, 3, 3]
我希望输出为[1、2、3]。即使使用非列表理解方法,我也会遇到完全相同的问题。甚至在我将m复制到另一个变量之后。
我想念什么?
为了使Lambda记住的值m,可以使用具有默认值的参数:
m
[x() for x in [lambda m=m: m for m in [1,2,3]]] # [1, 2, 3]
之所以可行,是因为默认值在定义时设置一次。现在,每个lambda都会使用自己的默认值,m而不是m在lambda执行时在外部范围中查找的值。