警惕python中的默認參數

def foo(bar, baz=[]):
    baz.append(bar)
    print baz

foo(1)
foo(2)

輸出結果為

[1]
[1,2]

原因是,當解釋器執行def的時候,默認參數會被計算并存在函數對象的.func_defaults屬性中。這個對象在所有的函數調用中共享。
我們可以測試一下

def foo(bar, baz=[]):
    baz.append(bar)
    print baz

print foo.func_defaults  # ([],)
foo(1)
print foo.func_defaults  # ([1],)
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容