為什么循環體放在函數參數里就不會變了?
def count():
? ? fs = []
? ? for i in range(1, 4):
????????①a=i
? ? ? ? def f(②a=i):
? ? ? ? ? ? return a*a
? ? ? ? fs.append(f)
? ? return fs
f1, f2, f3 = count()
print f1(), f2(), f3()
為什么a=i放在1處是輸出999放在2處就是輸出149了。i是循環體會變所以我想讓他固定下來,所以用了a=i,但是放在外面就沒有用,放在函數參數里就可以了?十分疑惑,求大神解答!
2019-07-23
這個函數類似于裝飾器,在函數f1,f2,f3沒有執行前,count()函數已經執行完了,若放在1處,count()函數執行完i和a已經變到3了,而且還沒有傳遞到f()函數內部,之后執行f1(),f2(),f3()函數時,執行的f()函數都是a=3的結果,? ? ?若是放在2處,執行count()函數時,每次執行f()函數,a已經作為參數傳遞到f()函數內部了。? ?這樣就會出現你這樣的結果了