デフォルト引数の後書き

知らんかった

>>> def foo(a,b,c):
...   print locals()
...
>>> foo(1,2,3)
{'a': 1, 'c': 3, 'b': 2}
>>> foo.func_defaults=(11,22,33)
>>> foo()
{'a': 11, 'c': 33, 'b': 22}
>>> foo()
{'a': 11, 'c': 33, 'b': 22}
>>> foo(1)
{'a': 1, 'c': 33, 'b': 22}
>>> foo.func_defaults=(11,)
>>> foo(1,2)
{'a': 1, 'c': 11, 'b': 2}

へええええええ。後から変えられるんだー。不勉強

ということわ!

ひょっとしてpython初心者ひっかかるポイントなんばーわん(当社比)!の

>>> def foo(a = []):
...   a.append("A")
...   return a
...
>>> foo()
['A']
>>> foo()
['A', 'A']
>>> foo()
['A', 'A', 'A']

こんなの。これこいつでなんとかなる?

>>> def foo(a=[]):
...   a.append("A")
...   foo.func_defaults = ([],)
...   return a
...
>>> foo()
['A']
>>> foo()
['A']
>>> foo()
['A']
>>> foo([1,2,3])
[1, 2, 3, 'A']

おお、よかんべじゃないですか

あとは

デコレータにでもすればいいのかな。ごめん、めんどくさくなりました;;;><;;;