flist = []
for i in range(3):
def foo(x): print x + i
flist.append(foo)
for f in flist:
f(2)
上面这段代码的输出是4,4,4。是因为函数f加入到flist列表里时,i还未被赋值,只是当执行的时候才去找i的值,而第一个for循环结束后,i为2,所以最终输出都是4。
但是如果把代码修改如下,输出就变为2,3,4。这是为什么? 函数加入flist列表时,i应该同样也未被赋值,导致y也并未被赋值,而是要等到第二个for循环时才计算i和y吧? 请大家指点,谢谢!
flist = []
for i in range(3):
def foo(x,y=i): print x + y
flist.append(foo)
for f in flist:
f(2)
--