一尘不染

Python Lambda不记得for循环中的参数

python

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

从以下代码中,我期望创建两个lambda函数,每个函数获得不同的x,输出应为
1 2

但是输出是2 2

为什么?我该如何做两个不同的功能?使用def?

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

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


if __name__ == '__main__':
    main()

阅读 221

收藏
2020-12-20

共1个答案

一尘不染

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
2020-12-20