Python的拉姆达不记得的说法在for循环[复制](Python lambda doesn'

2019-06-26 14:55发布

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

我使用Python,并试图隔离一个问题,我与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()

Answer 1:

在身体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


Answer 2:

看起来像工作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()


Answer 3:

这将解决这个问题。 这是因为X是直接绑定到拉姆达。

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()


文章来源: Python lambda doesn't remember argument in for loop [duplicate]