重複の可能性:
「可変デフォルト引数修正」構文が非常に醜い理由、Python初心者
にPythonで驚き最小の原則を尋ねる:可変デフォルト引数
これが例です。
def list_as_default(arg = []):
pass
重複の可能性:
「可変デフォルト引数修正」構文が非常に醜い理由、Python初心者
にPythonで驚き最小の原則を尋ねる:可変デフォルト引数
これが例です。
def list_as_default(arg = []):
pass
から: http://www.network-theory.co.uk/docs/pytut/DefaultArgumentValues.html
デフォルト値は一度だけ評価されます。デフォルトがリスト、辞書、またはほとんどのクラスのインスタンスなどの可変オブジェクトである場合、これは違いを生みます。たとえば、次の関数は、後続の呼び出しで渡された引数を累積します。
def f(a, L=[]):
L.append(a)
return L
print f(1)
print f(2)
print f(3)
これは印刷されます
[1]
[1, 2]
[1, 2, 3]
後続の呼び出し間でデフォルトを共有したくない場合は、代わりに次のように関数を記述できます。
def f(a, L=None):
if L is None:
L = []
L.append(a)
return L