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

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

閉包的討論

老師能解釋一下 為什么不能寫成這樣 def count(): ? ?fs = [] ? ?for i in range(1, 4): ? ? ? ?def f(j): ? ? ? ? ? ?return j*j ? ? ? ?r = f(i) ? ? ? ?fs.append(r) ? ?return fs print count() [1, 4, 9] #反回 [1, 4, 9] #正確返回1 4 9 老師寫的也我能理解,但是兩種結構區別不理解 為什么一個返回 list 一個返回3個數值

正在回答

4 回答

def?count():
????fs?=?[]
????for?i?in?range(1,?4):
????????def?f(j):
????????????return?j*j
????????r?=?f(i)
????????fs.append(r)?#r是函數f()計算后的返回值,是int型對象,所以fs當然是一個有3個整數的list
????return?fs
print?count()
def?count():
????fs?=?[]
????for?i?in?range(1,?4):
????????def?f(j):
????????????def?g():
????????????????return?j*j
????????????return?g
????????r?=?f(i)?#r是g()的閉包
????????fs.append(r)?#fs存的將是g()閉包的三個實現,分別是在輸入為1,2,3的時候
????return?fs
f1,?f2,?f3?=?count()?#f1,f2,f3就是這三個閉包
print?f1(),?f2(),?f3()?#加()后就是函數的求值,所以f1()就相當于call?g(1),返回值就是1,f2()就相當于call?g(2),返回值就是4等

希望對你有幫助

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

ATCUAU 提問者

感謝 大神 !
2015-04-13 回復 有任何疑惑可以回復我~
#2

bryan4it

第二個里:g 是 f 的閉包,f 是 count的閉包???
2015-08-15 回復 有任何疑惑可以回復我~

當初的理解就是同樣一個函數調用..結果確是不一樣的...讓我在點郁悶...之前看過點匯編知識..貌似有寄存器什么現場保護什么的..不是很清楚..大概是一個函數運行參數什么的也會保存恢復...想到這個貌似就理解了點...貌似不單單只是一個函數地址的問題...是不是python保存一個函數地址的時候還wf 把當時運行的環境保存了...之前C里面函數地址..貌似不是這樣的...還得負責傳參數...

0 回復 有任何疑惑可以回復我~
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()

1?4?9


0 回復 有任何疑惑可以回復我~
def?count():
????fs?=?[]
????for?i?in?range(1,?4):
????????def?f(j):
????????????return?j*j
????????r?=?f(i)
????????fs.append(r)
????return?fs
print?count()

[1,?4,?9]


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

ATCUAU 提問者

代碼如下 ,忘記用代碼格式了。 老師能詳細說下和下面代碼區別在哪 該怎么理解 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() 1 4 9
2015-04-13 回復 有任何疑惑可以回復我~

舉報

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

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

進入課程

閉包的討論

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

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

幫助反饋 APP下載

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

公眾號

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