10

可能重复:
在 lambda 表达式中使用变量的值

我正在使用 python 并试图找出我在使用 lambda 函数时遇到的问题。

从下面的代码中,我期望创建两个 lambda 函数,每个函数都有一个不同的 x,输出应该是
1 2

但输出是 2 2

为什么?我怎样才能制作两个不同的功能?使用定义?

def main():
    d = {}
    for x in [1,2]:
        d[x] = lambda : print(x)

    d[1]()
    d[2]()


if __name__ == '__main__':
    main()
4

3 回答 3

24

代码中的主体lambda引用了名称x。与该名称关联的值在循环的下一次迭代中更改,因此当调用 lambda 并解析名称时,它会获得新值。

为了达到你期望的结果,将x循环中的值绑定到一个参数,lambda然后引用该参数,如下所示:

def main():
    d = {}
    for x in [1,2]:
        d[x] = lambda x=x: print(x)

    d[1]()
    d[2]()


if __name__ == '__main__':
    main()

>>> 
1
2
于 2012-07-30T14:14:31.467 回答
8

看起来像为partial.

from functools import partial 
def main():
    d = {}
    for x in [1,2]:
        d[x] = partial(lambda x: print(x), x=x)

    d[1]()
    d[2]()


if __name__ == '__main__':
    main()
于 2012-07-30T14:23:35.200 回答
4

这将解决它。这是因为 x 直接绑定到 lambda。

def create_lambda(x):
    return lambda : print(x)

def main():
    d = {}
    for x in [1,2]:
        d[x] = create_lambda(x)

    d[1]()
    d[2]()


if __name__ == '__main__':
    main()
于 2012-07-30T14:13:50.097 回答