亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python默認參數不生效的解決方法

發布時間:2020-09-01 10:30:01 來源:億速云 閱讀:457 作者:小新 欄目:編程語言

這篇文章主要介紹python默認參數不生效的解決方法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

默認參數很有用,但使用不當,也會掉坑里。默認參數有個最大的坑,演示如下:

先定義一個函數,傳入一個list,添加一個END再返回:

def add_end(L=[]):
    L.append('END')
    return L

當你正常調用時,結果似乎不錯:

>>> add_end([1, 2, 3])
[1, 2, 3, 'END']
>>> add_end(['x', 'y', 'z'])
['x', 'y', 'z', 'END']

當你使用默認參數調用時,一開始結果也是對的:

>>> add_end()
['END']

但是,再次調用add_end()時,結果就不對了:

>>> add_end()
['END', 'END']
>>> add_end()
['END', 'END', 'END']

很多初學者很疑惑,默認參數是[],但是函數似乎每次都“記住了”上次添加了'END'后的list。

原因解釋如下:

Python函數在定義的時候,默認參數L的值就被計算出來了,即[],因為默認參數L也是一個變量,它指向對象[],每次調用該函數,如果改變了L的內容,則下次調用時,默認參數的內容就變了,不再是函數定義時的[]了。

所以,定義默認參數要牢記一點:默認參數必須指向不變對象!

要修改上面的例子,我們可以用None這個不變對象來實現:

def add_end(L=None):
if L is None:
L = []
L.append('END')
return L

現在,無論調用多少次,都不會有問題:

>>> add_end()
['END']
>>> add_end()
['END']

為什么要設計str、None這樣的不變對象呢?因為不變對象一旦創建,對象內部的數據就不能修改,這樣就減少了由于修改數據導致的錯誤。此外,由于對象不變,多任務環境下同時讀取對象不需要加鎖,同時讀一點問題都沒有。我們在編寫程序時,如果可以設計一個不變對象,那就盡量設計成不變對象。

以上是python默認參數不生效的解決方法的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金阳县| 邵武市| 田东县| 犍为县| 新邵县| 库伦旗| 大荔县| 琼海市| 镇赉县| 扶余县| 木里| 余江县| 来宾市| 环江| 沁水县| 通许县| 利川市| 惠东县| 南阳市| 上高县| 电白县| 屏南县| 胶南市| 砀山县| 太原市| 洛南县| 临澧县| 辽阳市| 沧源| 大新县| 芦溪县| 房产| 武陟县| 齐齐哈尔市| 太仓市| 宣武区| 芜湖市| 新龙县| 密云县| 泰顺县| 天峨县|