【发布时间】:2018-09-12 00:44:06
【问题描述】:
def multipliers():
return [lambda x: i * x for i in range(4)]
print([m(1) for m in multipliers()]) # [3, 3, 3, 3]
为什么不是[0, 1, 2, 3]?无法理解。那么,出于某种原因,我们在所有 lambda 表达式中都有 i = 3 吗?为什么?
【问题讨论】:
标签: python
def multipliers():
return [lambda x: i * x for i in range(4)]
print([m(1) for m in multipliers()]) # [3, 3, 3, 3]
为什么不是[0, 1, 2, 3]?无法理解。那么,出于某种原因,我们在所有 lambda 表达式中都有 i = 3 吗?为什么?
【问题讨论】:
标签: python
这是因为 Python late binding closures。您可以通过以下方式解决问题:
def multipliers():
return [lambda x, i=i : i * x for i in range(4)]
【讨论】:
这是你想要做的吗?
def multipliers(x):
return [i * x for i in range(4)]
print(multipliers(1))
>> [0, 1, 2, 3]
【讨论】:
print ([0, 1, 2, 3])? OP 已询问 他们的 代码有什么问题。
print('[0,1,2,3]') 更容易获得资源