亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

為啥舉例的結果是三個九

在這一節糾結了半天

def?count():
????fs?=?[]
????for?i?in?range(1,?4):
????????def?f():
?????????????return?i*i
????????fs.append(f)
????return?fs

f1,?f2,?f3?=?count()
哪位大神能否再講解的細致一些


正在回答

1 回答

個人理解如下,帶‘測’字的是自己在理清運行過程時加的

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,在內存中的存儲位置都不同


0 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
python進階
  • 參與學習       255564    人
  • 解答問題       3038    個

學習函數式、模塊和面向對象編程,掌握Python高級程序設計

進入課程

為啥舉例的結果是三個九

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號