实际上,Python的行为符合定义。创建了三个单独的函数,但是每个函数都封闭了定义它们的环境 -在这种情况下,是全局环境(如果将循环放在另一个函数内部,则为外部函数的环境)。不过,这确实是问题所在-在这种环境下,i发生了变异,并且所有闭包都引用相同的i。
这是我能想到的最佳解决方案-创建一个函数创建器,然后调用它。这将为所创建的每个函数强制使用不同的环境,每个函数具有不同的i。
flist = []for i in xrange(3): def funcC(j): def func(x): return x * j return func flist.append(funcC(i))for f in flist: print f(2)
当您混合副作用和功能编程时,就会发生这种情况。



