def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
你会发现:
>>> f1()
9
>>> f2()
9
>>> f3()
9
因为返回的函数引用了变量i,但是并非是立即执行,而是等到三个函数都返回后,此时i=3,所以结果都是9
所以,返回闭包时,注意一点:返回函数不要使用任何循环变量,或者后续会发生变化的变量。
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
你会发现:
>>> f1()
9
>>> f2()
9
>>> f3()
9
因为返回的函数引用了变量i,但是并非是立即执行,而是等到三个函数都返回后,此时i=3,所以结果都是9
所以,返回闭包时,注意一点:返回函数不要使用任何循环变量,或者后续会发生变化的变量。