python : 関数のデフォルト引数

今日はじめて知ったんですが、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

コメント

人気の投稿