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使用正确的