為啥舉例的結果是三個九
在這一節糾結了半天
def?count(): ????fs?=?[] ????for?i?in?range(1,?4): ????????def?f(): ?????????????return?i*i ????????fs.append(f) ????return?fs f1,?f2,?f3?=?count() 哪位大神能否再講解的細致一些
在這一節糾結了半天
def?count(): ????fs?=?[] ????for?i?in?range(1,?4): ????????def?f(): ?????????????return?i*i ????????fs.append(f) ????return?fs f1,?f2,?f3?=?count() 哪位大神能否再講解的細致一些
2020-08-22
舉報
2020-08-28
個人理解如下,帶‘測’字的是自己在理清運行過程時加的
def count():? ?
? ? fs = []
? ? for i in range(1, 4):
? ? ? ? def f():
? ? ? ? ? ? #測:print('i的值:',i)
? ? ? ? ? ? return i*i
? ? ? ? #測 :print(f, i)
? ? ? ? fs.append(f)
? ? ? ? #上面這一句追加語句append,只是把名為f的這三個不同的函數依次放進fs里邊存著,
? ? ? ? #根本沒有去調用f這個函數,所以f里邊的語句永遠不會執行
? ? ? ? #而這個for循環結束的時候,i已經增長為3,
? ? ? ? #所以在下面調用f函數,即f1()或f2()或f3()這種形式時,f里邊的語句才開始被執行
? ? ? ? #而進入f函數里邊的這個i的值一直就是之前for循環結束時的3,所以最后結果才會出現三個9
? ? return fs
f1,f2,f3 = count()
#測 :print(f1(),f2(),f3())或直接f1()
#在調用f1時,即f1()這種形式,才會有數值顯示
#但是,此時的值全部都是9,而不是1,4,9
#因為當count()函數返回了3個函數時,這三個函數引用的變量i的值已經是3了,
#f1,f2,f3 = [f(),f(),f()]是三個不同的f,在內存中的存儲位置都不同