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

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

為什么會有個None ?請問該如何在for循環(huán)中利用循環(huán)變量批量創(chuàng)建函數(shù)?

為什么會有個None ?請問該如何在for循環(huán)中利用循環(huán)變量批量創(chuàng)建函數(shù)?

楊__羊羊 2023-04-30 05:01:42
倒騰了一個下午,最后確定了問題在于for循環(huán)中創(chuàng)建的函數(shù)中變量的值會被覆蓋。如下列代碼所示:    funcList = []     i_List = []    for i in range(0, 3):         i_List.append(i)         def printI():            print(i_List[i], end = ',')         funcList.append(printI)         print(funcList[0]() )    print(funcList[1]() )    print(funcList[2]() )    print(i_List)程序運行結(jié)果如下:我的問題是:為什么會有個None如何在for循環(huán)中利用循環(huán)變量批量創(chuàng)建函數(shù)謝謝!
查看完整描述

1 回答

?
慕萊塢森

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

為什么會有個None

因為print(funcList[0]())語句中, funcList[0]()的返回值是None:

def printI():    # 這里打印了i_List[i], 加一個括號, 但是不換行
    print(i_List[i], end = ',')    # 所有不顯示返回的返回值都是None
    # 外層再有一個print()的話,就會打印`None`
如何在for循環(huán)中利用循環(huán)變量批量創(chuàng)建函數(shù)

這是個陷阱,情況跟Javascript類似。printI這個閉包捕獲了i這個變量(捕獲的是變量本身而不是變量的值), 但是i變量是變化的, 所以最后的結(jié)果都是i在迭代后的最后一個值。
因此,有幾個辦法可以繞過(不限于以下幾種):

1.

...    def printI(x):        def _printI():
            print(i_List[x], end = ',')        return _printI
    funcList.append(printI(i))
...

2.

from functools import partial
...    def printI(x):        print(i_List[x], end = ',')
    funcList.append(partial(printI, i))
...

3.

...
    def printI(i=i):        print(i_List[i], end = ',')
    funcList.append(printI)...


查看完整回答
反對 回復(fù) 2023-05-02
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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