【发布时间】:2015-03-31 20:24:07
【问题描述】:
我正在运行 Python 3.4.2,但我对代码的行为感到困惑。我正在尝试创建一个具有递增程度的可调用多项式函数列表:
bases = [lambda x: x**i for i in range(3)]
但出于某种原因,它会这样做:
print([b(5) for b in bases])
# [25, 25, 25]
为什么bases 似乎是最后一个 lambda 表达式的列表,在列表推导中,重复了?
【问题讨论】:
-
您可能会觉得这很有帮助:Gotcha: Python, scoping, and closures
-
unutbu:知道如何让它工作吗?
-
也许你想要的是
bases = lambda x:[x**i for i in range(3)]? -
@user3467349 这完全不同。然后你会做
base_results = bases(5) -
@AdamSmith 我明白了......,那么据我所知,这是一个解释器错误......“延迟”。这应该
raise无效(这可能是合理的)或使用适当的迭代器分配......