デフォルト引数値
|
値が計算される時
函数が実行された時ではなく、定義された時、デフォルト引数の価が計算される
よく犯す誤りは、リストや辞書などのミュータブルなデーター型をデフォルト引数値にして使ってしまうことです。
バグがあるコード
def buggy(arg, result=[]):
result.append(arg)
print(result)
buggy('a')
['a']
buggy('b') #['b']を期待しているはず。
['a', 'b']
正しい動作をさせる その1
def works(arg):
result = []
result.append(arg)
return result
works('a')
['a']
works('b')
['b']
別の正しいもの
def nonbuggy(arg, result=None):
if result is None:
result = []
result.append(arg)
print(result)
nonbuggy('a')
['a']
nonbuggy('b')
['b']