关于我个人的理解
def count():
fs = []
for i in range(1, 4):
def f():
return i*i
fs.append(f)
return fs
f1, f2, f3 = count()
print (f1(),f2(),f3())
第一步:执行代码“f1, f2, f3 = count()”赋值号的右边,调用count()函数,开始执行count()函数的内部命令
第二步:创建一个局部变量fs
第三步:开始执行for循环遍历列表[1,2,3],i 赋值1,然后执行 fs.append(f) 代码,得到[f],注意这时候并不需要执行函数f(),因为没有调用
第四步:继续执行for循环遍历列表[1,2,3],i 赋值2,然后执行 fs.append(f) 代码,得到[f,f],注意这时候并不需要执行函数f(),因为没有调用
第五步:继续执行for循环遍历列表[1,2,3],i 赋值3,然后执行 fs.append(f) 代码,得到[f,f,f],注意这时候并不需要执行函数f(),因为没有调用
第六步:执行代码“f1, f2, f3 = count()”赋值号的左边,将fs(即[f,f,f])赋值给f1,f2,f3,使用到了高级序列赋值语句模式
第七步:执行 print (f1(),f2(),f3()) 代码
第八步:调用函数f(),执行return i*i,此时的i的地址值指向的是外层函数中i的地址,i的值应为for之前的for循环重新赋值为3,所以return 3*3