Pythonの関数のデフォルト値にリストなどを使うときは要注意


このエントリーをはてなブックマークに追加

Pythonの関数には、他の多くの言語と同じく、引数のデフォルト値を指定する機能があります。 例えば以下の関数に引数を一つのみ与えたときは、bには3の値が入ります。

def func1(a, b = 3):
    return a + b

このデフォルト値に、リスト、辞書などの可変オブジェクトを指定するときは要注意です。デフォルト値は最初の一度しか評価されず、関数を呼ぶたび値が変わってしまう可能性があります。

例えば以下のコード

def func2(a, b = []):
    b.append(a)
    print(b)

func(7)
func(8)
func(9)

を実行すると、結果は以下になります。

[7]
[7, 8]
[7, 8, 9]

参考