代码之家  ›  专栏  ›  技术社区  ›  Richard Rublev

巨蟒lambda副作用[复制]

  •  1
  • Richard Rublev  · 技术社区  · 6 年前

    我正在尝试在循环中创建函数:

    functions = []
    
    for i in range(3):
        def f():
            return i
    
        # alternatively: f = lambda: i
    
        functions.append(f)
    

    问题是所有函数最终都是相同的。三个函数都返回2,而不是返回0、1和2:

    print([f() for f in functions])
    # expected output: [0, 1, 2]
    # actual output:   [2, 2, 2]
    

    为什么会发生这种情况,我应该怎么做才能得到3个分别输出0、1和2的函数?

    0 回复  |  直到 5 年前