小编典典

怪异的行为:列表理解内的Lambda

python

在python 2.6中:

[x() for x in [lambda: m for m in [1,2,3]]]

结果是:

[3, 3, 3]

我希望输出为[1、2、3]。即使使用非列表理解方法,我也会遇到完全相同的问题。甚至在我将m复制到另一个变量之后。

我想念什么?


阅读 213

收藏
2021-01-20

共1个答案

小编典典

为了使Lambda记住的值m,可以使用具有默认值的参数:

[x() for x in [lambda m=m: m for m in [1,2,3]]]
# [1, 2, 3]

之所以可行,是因为默认值在定义时设置一次。现在,每个lambda都会使用自己的默认值,m而不是m在lambda执行时在外部范围中查找的值。

2021-01-20