閉包不太懂,請大神賜教
我的理解是f1,f2,f3在for循環中沒有進行相乘的計算,等循環完它們的值都是3后再進行計算,
如果我的理解沒問題,那么我想知道,3是怎么賦予f1,f2,f3,的,然后它們是怎么最后計算成9的,不是不進行return i*i嗎?
如果理解有誤懇請大神解釋,希望可以通俗一點,小白聽不太懂專業術語,十分感謝!
我的理解是f1,f2,f3在for循環中沒有進行相乘的計算,等循環完它們的值都是3后再進行計算,
如果我的理解沒問題,那么我想知道,3是怎么賦予f1,f2,f3,的,然后它們是怎么最后計算成9的,不是不進行return i*i嗎?
如果理解有誤懇請大神解釋,希望可以通俗一點,小白聽不太懂專業術語,十分感謝!
2018-11-16
舉報
2018-11-16
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()
? ? ? ??
注意到?? fs.append(f)中傳入的為一個函數f,即在list中對應著三個函數地址(試試print f1,f2,f3 會顯示為三個地址),調用f1,f2,f3 時則都對應著調用f函數,此時for循環已經結束,最終賦值為3,即return 3*3。
嘗試改寫函數:?fs.append(f()),此時傳入list為三個值1,4,9.即[1,4,9],當執行f1,f2,f3=count()語句時,為依次取出list表中的值,即1,4,9
2019-01-22
閉包最大用處有兩個,一個是可以讀取函數內部的變量,另一個讓這些變量的值始終保持在內存中