今日はじめて知ったんですが、pythonの関数のデフォルト引数の挙動
>>> def b(l=[]):
... l.append(1)
... return l
...
>>> print b()
[1]
>>> print b()
[1, 1]
>>> print b()
[1, 1, 1]
>>>
あらららららららららら・・・・???
調べてみると、デフォルト引数は、関数が作成されるときに一度だけセットされるみたいです。
回避するには
>>> def c(l=None):
... if l is None:
... l=[]
... l.append(1)
... return l
...
>>> c()
[1]
>>> c()
[1]
>>> c([1])
[1, 1]
>>>
とかやるみたいです。
完全に間違ってました・・・orz
>>> def b(l=[]):
... l.append(1)
... return l
...
>>> print b()
[1]
>>> print b()
[1, 1]
>>> print b()
[1, 1, 1]
>>>
あらららららららららら・・・・???
調べてみると、デフォルト引数は、関数が作成されるときに一度だけセットされるみたいです。
回避するには
>>> def c(l=None):
... if l is None:
... l=[]
... l.append(1)
... return l
...
>>> c()
[1]
>>> c()
[1]
>>> c([1])
[1, 1]
>>>
とかやるみたいです。
完全に間違ってました・・・orz
コメント