【发布时间】:2020-08-16 19:36:28
【问题描述】:
我在网上看到了这段代码,不知道它是如何工作的。
def multipliers():
return [lambda x : i * x for i in range(4)]
print([m(2) for m in multipliers()])
这里有一些问题:
- 乘法器函数返回的列表的输出是什么?
- 这里的
m(2)是什么意思?因为它没有在代码中的任何地方提到什么是 m 。但是代码仍然可以正常工作。
【问题讨论】:
-
2.列表推导中提到了“m”。
-
嗯。这段代码对我来说有令人惊讶的行为。我希望 multipliers() 会返回一个包含四个不同 lambda 的列表,当使用 x = 2 进行评估时,它们会返回不同的值。但它会打印 [6, 6, 6, 6]。关于这些 lambdas 是如何创建的,我没有关注什么?
标签: python late-binding