我正在使用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()
lambda您代码中的主体引用了名称x。与该名称关联的值在循环的下一次迭代中更改,因此,当调用lambda并解析名称时,它将获得新值。
lambda
x
为了获得预期的结果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