使用 lambda 函数进行列表理解

Ale*_*xey 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]
Run Code Online (Sandbox Code Playgroud)

为什么不是[0, 1, 2, 3]?无法理解。那么,出于某种原因,我们i = 3在所有 lambda 表达式中都有?为什么?

Ted*_*man 7

这是因为 Python 的后期绑定闭包。你可以通过写来解决这个问题:

def multipliers():
    return [lambda x, i=i : i * x for i in range(4)]
Run Code Online (Sandbox Code Playgroud)