【发布时间】:2023-02-17 21:13:07
【问题描述】:
def multipliers():
return [lambda x: i * x for i in range(3)]
print([m(2) for m in multipliers()])
如何修复此 lambda 函数?
我除了:[0, 2, 4]
我有:[4, 4, 4]
【问题讨论】:
标签: python python-3.x
def multipliers():
return [lambda x: i * x for i in range(3)]
print([m(2) for m in multipliers()])
如何修复此 lambda 函数?
我除了:[0, 2, 4]
我有:[4, 4, 4]
【问题讨论】:
标签: python python-3.x
这与lambdas 如何捕获姓名i,而不是它的值(并且该 listcomp 中名称 i 的最后一个值将是 2)。
再添加一个具有本地名称 i 的函数:
def make_multiplier(x):
return lambda y: x * y
def multipliers():
return [make_multiplier(i) for i in range(3)]
print([m(2) for m in multipliers()])
【讨论】:
lambda 也是一个具有局部作用域的函数。要将每个 lambda 绑定到相应的 i 计数器,您可以将其作为具有默认值的参数传递:
def multipliers():
return [lambda x, i=i: i * x for i in range(3)]
print([m(2) for m in multipliers()]) # [0, 2, 4]
【讨论】: