在Python中,在循环和分支中创建的变量没有作用域。您创建的所有函数lambda
都引用了相同的i
变量,该变量9
在循环的最后一次迭代中设置为。
解决方案是创建一个返回函数的函数,从而确定迭代器变量的范围。这就是该functools.partial()
方法行之有效的原因。例如:
def test():
def makefunc(i):
return lambda x: p(i, x)
a = []
for i in range(10):
a.append(makefunc(i))
return a