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

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

這段程序的執行過程,誰能解釋一下,沒看懂

def count():

? ? fs = []

? ? for i in range(1, 4):

? ? ? ? def f(j):

? ? ? ? ? ? def g():

? ? ? ? ? ? ? ? return j * j

? ? ? ? ? ? return g

? ? ? ? r = f(i)

? ? ? ? fs.append(r)

? ? return fs


f1, f2, f3 = count()

print f1(), f2(), f3()


正在回答

4 回答

說說我的理解:原來因為延時調用導致i直接變成3,現在在for循環中新定義一個可以傳入變量的函數,然后里面再套上計算這個變量平方的函數,這樣一來變量就被保存下來了

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

fs列表里存放的內容是 通過for循環出來的三個函數對象f(1) f(2) f3(),而f(1) f(2) f(3) 每個里面又定義了一個g()函數并且被返回出來,當最后一行f1(),f2(),f3()執行時,最終執行的是每個g()函數體,我大概就是這么理解的

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

參考一師兄的問答:

r = f(i),而def f(j)的j是用來代替可變參數i的,當r取值為1的時候,j也變為1,運行def f(j = 1)的函數,然后代入到def g函數中,得出結果,返回結果。

原文比我說得好,不過忘了那個問答是哪個了,你可以自己查看下哈



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

也是初學,我的理解是:

f1,f2,f3 = count()? ?count()返回的是fs? 是一個列表,所以這個可能就是像x,y = 2,3這樣的賦值,不知道是不是元組拆包?? 然后打印f1()? 注意r = f(i) fs.append(r)? 列表fs中添加的是r ,而r 是一個函數f(i),? ?i in range(1, 4),值為1,2,3,所以f(j) 函數被調用,把i的值傳給j? ,返回g,? 那就調用g()函數,g() 返回 j*j, 其實就是實參i * i,返回了1,4,9 分別對應?f1(), f2(), f3()

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

舉報

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

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

進入課程

這段程序的執行過程,誰能解釋一下,沒看懂

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

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

幫助反饋 APP下載

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

公眾號

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