python闭包问题求解

发布网友 发布时间:2022-04-21 18:55

我来回答

1个回答

热心网友 时间:2022-04-18 07:17

因为python具有late binding的机制——闭包中内部函数的值只有在被调用时才会确定,等到f1,f2,f3调用时,此时闭包中f()函数的i已经等于3了,于是所有结果等于9.

如果想得到你要的结果,就得提前把i作为参数传入,把原先的def f():所在行修改为def f(i=i)即可,其中等号左边的i是形参,等号右边的i是for in 循环中对应的i

def count():
fs = []
for i in range(1,4):
def f(i=i):
return i**2
fs.append(f)
return fs

f1,f2,f3 = count()

print(f1())
print(f2())
print(f3())

输出

1
4
9

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com