2011-06-22 63 views

回答

38

來自PyCon幾年前的好文檔 - Default parameter values explained。但基本上,因爲列表是可變對象,並且在函數定義時計算關鍵字參數,所以每次調用該函數時,都會得到相同的默認值。

要做到這一點是正確的做法:

def F(a, b=None): 
    if b is None: 
     b = [] 
    b.append(a) 
    return b 
8

Default parameters是,相當直觀,有點像函數對象的成員變量。

當函數定義被執行時,評估默認參數值。這意味着表達式被定義一次,定義函數時,並且每次調用都使用相同的「預先計算」值。這對於瞭解默認參數是否爲可變對象(如列表或字典)時尤爲重要:如果函數修改對象(例如,通過將項目附加到列表中),則實際上會修改默認值。

http://docs.python.org/reference/compound_stmts.html#function

列表是一個可變的物體;你可以改變他們的內容。得到默認列表(或字典,或設置)正確的方法是在運行時創建它來代替,裏面的功能:

def good_append(new_item, a_list=None): 
    if a_list is None: 
     a_list = [] 
    a_list.append(new_item) 
    return a_list