【发布时间】:2011-11-14 04:11:10
【问题描述】:
在 python 2.6 中:
[x() for x in [lambda: m for m in [1,2,3]]]
结果:
[3, 3, 3]
我希望输出为 [1, 2, 3]。即使使用非列表理解方法,我也会遇到完全相同的问题。甚至在我将 m 复制到另一个变量之后。
我错过了什么?
【问题讨论】:
-
... 但这适用于迭代器。>>> l = (lambda: m for m in [1,2,3]) >>> [x() for x in l]
-
这是因为生成器不会一次创建所有值,它会在请求时创建它们。列表推导式和生成器表达式并不相同,尽管它们通常可以互换使用。在某些情况下(例如这种情况),行为显着不同。
-
为什么
x()不只是x??有什么不同?? -
@amyassin - 因为在这种情况下 x 是一个 lambda(动态声明的匿名函数)。他正在调用
x()来调用它。真的,你应该问自己的问题。 -
@g.d.d.c thanx,我需要知道在搜索中应该转向哪里......
标签: python lambda list-comprehension