关于python闭包的循环,为什么结果全是9
def count(): fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f = count()
for ff in f:
print(ff())
为什么这段程序运行结果全都是9,一直没理解
回答:
fs 里所有成员引用的 i ,都是同一个 i 。
回答:
返回闭包时需要记住:函数中不要引用任何循环变量,或者后续会发生变化的变量(因为返回的函数此时类似于懒加载,尚未执行,而变量已经发生变化)
那如果需要这样做,可以用如下代码:
def count(): fs = []
for i in range(1, 4):
def f(j):
def g():
return j*j
return g
fs.append(f(i))
return fs
f = count()
for ff in f:
print(ff())
此时 f(i)已经将循环变量的当前值进行了绑定,所以可以正常显示结果
以上是 关于python闭包的循环,为什么结果全是9 的全部内容, 来源链接: utcz.com/p/938449.html