重複の可能性:
Pythonの「驚き最小の原則」:可変のデフォルト引数
これが機能することを期待している方法が正しいかどうかを確認したいだけです。これが私が書いているクラスの簡略化されたバージョンです:
class Foo(object):
def __init__(self):
pass
def bar(self, test1=[], test2=[]):
if test2:
test1.append(1)
print test1
さて、私にとって、test1とtest2は、設定されていない限り、関数バーが呼び出されたときに常に空のリストとして設定する必要があります。これは、test1が出力されるとき、リストには1つの項目のみが存在する必要があることを意味します(引数として1つの項目のみを指定する場合)。ただし、これは当てはまりません。
>>> i = Foo()
>>> i.bar()
[]
>>> i.bar(test2=[1])
[1]
>>> i.bar()
[1, 1]
>>> i.bar(test2=[1])
[1, 1, 1]
この場合、整数を使用して同様の結果が期待されます。
class Foo(object):
def __init__(self):
pass
def bar(self, test1=0, test2=0):
if test2:
test1 += 1
print test1
ただし、ここでは、test1は常に0に設定されています。
>>> i = Foo()
>>> i.bar()
0
>>> i.bar(test2=1)
1
>>> i.bar(test2=1)
1
>>> i.bar(test2=1)
1
リストは関数またはクラスの名前空間に永続的であるように見えますが、整数は永続的ではありません。
これは私の側の誤解かもしれないので、いくつかの説明が必要です。