第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在循環(huán)中創(chuàng)建函數(shù)

在循環(huán)中創(chuàng)建函數(shù)

動漫人物 2019-06-24 13:04:45
在循環(huán)中創(chuàng)建函數(shù)我試圖在循環(huán)中創(chuàng)建函數(shù):functions = []for i in range(3):     def f():         return i    # alternatively: f = lambda: i     functions.append(f)問題是所有的函數(shù)最終都是相同的。這三個函數(shù)都返回2,而不是返回0、1和2:print([f() for f in functions])# expected output: [0, 1, 2]# actual output:   [2, 2, 2]為什么會發(fā)生這種情況,我應(yīng)該怎么做才能得到分別輸出0、1和2的3種不同的函數(shù)?
查看完整描述

2 回答

?
慕姐8265434

TA貢獻(xiàn)1813條經(jīng)驗 獲得超2個贊

你遇到了一個問題后期綁定-每個函數(shù)都會查找i盡可能晚(因此,在循環(huán)結(jié)束后調(diào)用時,i將被設(shè)置為2).

通過強制早期綁定輕松修復(fù):更改def f():def f(i=i):就像這樣:

def f(i=i):
    return i

默認(rèn)值(右)i在……里面i=i參數(shù)名稱的默認(rèn)值。i,也就是左手。i在……里面i=i)向上看def時間,不是在call時間,所以從本質(zhì)上說,它們是一種尋找早期綁定的方法。

如果你擔(dān)心f獲得額外的參數(shù)(因此可能被錯誤地稱為),有一種更復(fù)雜的方法,使用閉包作為“函數(shù)工廠”:

def make_f(i):
    def f():
        return i    return f

在循環(huán)中使用f = make_f(i)而不是def聲明。


查看完整回答
反對 回復(fù) 2019-06-24
  • 2 回答
  • 0 關(guān)注
  • 607 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號