關于我個人的理解
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
2019-11-06
為什么,count要先算自己內部,再算左邊引用的
2019-11-06
可以,可以,有點懵懂了
2019-11-05
恍然大悟
2019-10-21
太棒了,感謝分享,終于看到一個讓我明白的答案了
2019-09-29
第三、四、五步為什么f()沒有執行
2019-09-16
???
2019-09-11
??很棒呀