关于python闭包的循环,为什么结果全是9

关于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

回到顶部