2012-01-27 60 views
3

可能重複:
「Least Astonishment」 in Python: The Mutable Default Argument可變的默認方法的參數在Python

我使用Python IDE PyCharm和東西是在默認情況下已經是它會顯示警告時,我有一個多種類型作爲默認值。例如,當我有這樣的:

def status(self, options=[]): 

PyCharm就是了看起來像:

def status(self, options=None): 
    if not options: options = [] 

我的問題是,這是否是在Python社區做事的標準方法或者是這個只是PyCharm認爲應該完成的方式?將可變數據類型作爲默認方法參數存在缺點嗎?

+1

如果您在此處閱讀問題的答案,您會看到您正在重複許多問題的答案。您的代碼是許多問題的標準答案。 – 2012-01-27 19:52:52

回答

5

這是正確的做法,因爲每次調用同一個方法時都使用相同的可變對象。如果可變對象之後被改變,那麼默認值可能不會是它的意圖。

例如,下面的代碼:

def status(options=[]): 
    options.append('new_option') 
    return options 

print status() 
print status() 
print status() 

會打印:

['new_option'] 
['new_option', 'new_option'] 
['new_option', 'new_option', 'new_option'] 

,正如我上面所說的,可能不是你要找的內容。