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

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

求助求助,閉包和匿名兩節課中的問題

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

f1,?f2,?f3?=?count()
print?f1(),?f2(),?f3()
#這個代碼可以正確的顯示出1,4,9

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

f1,?f2,?f3?=?count()
print?f1(),?f2(),?f3()
#然而這個代碼只能顯示出9,9,9

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

f1,?f2,?f3?=?count()
print?f1(),?f2(),?f3()
#這個代碼會報錯

誰能解釋下這是為什么呢?


正在回答

1 回答

初學,不知道解釋的對不對啊

第一個問題:

fs.append(lambda?i=i:?i*i) 相當于 fs.append(lambda j=i: j*j)

(lambda?i=i:?i*i)中的第一個 i 是lambda自己聲明的局部變量 , 會屏蔽掉外部的 i 變量值。

第二個問題:

fs.append(lambda?a=i:?i*i) 相當于 fs.append(lambda : i*i)

(lambda?a=i:?i*i) 中的 i是引用外部變量 ,所以會發生變化,閉包要求不是不能引用外部會發生變化的變量么

第三個問題:

fs.append(lambda?i:?i*i)? 中相當于

def f(i):

??? return i*i

fs1.append(f)

然后后面的 print?f1(),?f2(),?f3() 函數中都沒有傳入參數,改為print?f1(1),?f2(2),?f3(3) 就不會報錯

fs.append(lambda?i:?i*i)? 中的 i 是lambda自己聲明的局部變量,會屏蔽外部的變量 i。

?

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

舉報

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

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

進入課程

求助求助,閉包和匿名兩節課中的問題

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

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

幫助反饋 APP下載

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

公眾號

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