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
所以,返回闭包时,注意一点:返回函数不要使用任何循环变量,或者后续会发生变化的变量。
本文通过一个具体的Python代码示例解释了闭包中常见的陷阱:当返回包含循环变量的闭包时,由于作用域的原因,所有闭包最终指向同一个变量值。文章强调在定义返回的闭包时避免使用循环变量。
232

被折叠的 条评论
为什么被折叠?



