关于python:如何返回使用变量值的函数?

How can I return a function that uses the value of a variable?

本问题已经有最佳答案,请猛点这里访问。

我想写一个返回函数列表的函数。作为一个mwe,下面是我尝试的函数,它给出了三个函数,将0、1和2添加到一个输入数字:

1
2
3
4
5
6
7
8
9
10
def foo():
    result = []
    for i in range(3):
        temp = lambda x: x + i
        print(temp(42))  # prints 42, 43, 44
        result.append(temp)
    return result

for f in foo():
    print(f(42))  #prints 44, 44, 44

与我的预期相反,每个函数最终都使用了我所取的最后一个值。我经历过类似的行为,例如,将列表用作函数的参数,但python实际上使用了指向列表的指针,但这里我是一个整数,所以我不理解这里发生了什么。我在运行python 3.5。


闭包绑定延迟,这意味着它们将在调用时定义的范围内使用EDOCX1的最后一个值(在本例中,EDOCX1的最后一个值(0)将是EDOCX1的最后一个值(2))。

对此的常见解决方案是提供EDOCX1的值(0)作为默认参数:

1
temp = lambda x, i=i: x + i

由于python在构造函数的过程中评估默认参数,这是一个帮助python使用正确的i值的技巧,当调用可调用文件时,它不会创建一个闭包,相反,它可以在本地查找i