2012-01-27 9 views
3

可能性の重複:
“Least Astonishment” in Python: The Mutable Default Argument変更可能なデフォルトのメソッドの引数

私は私が持っているときに警告を表示しますされ、デフォルトで持っているPythonのIDE PyCharmと何かを使用していますデフォルト値としてmutbale型。例えば、私が持っている場合は、この:

def status(self, options=[]): 

PyCharmのようなルックスにそれを望んでいる:

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

私の質問これはPythonコミュニティで物事の標準的な方法があるか、これをあるかどうかではありませんPyCharmがそれを行うべきだと思っているのとまったく同じですか?デフォルトのメソッド引数としてデータ型を変更できるという欠点はありますか?

+1

質問に対する回答を読むと、多数の質問に対する回答が繰り返されていることがわかります。あなたのコードは、多くの多くの質問に対する標準的な答えです。 –

答えて

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'] 

を。

関連する問題