
194
第 6 章 関数とクラス
File "<stdin>", line 1, in <module>
TypeError: spam() takes 1 positional argument but 2 were given
6.1.3
デフォルト引数
引数には、値を指定せずに呼び出した時に使用する、デフォルト値を指定できます。
def
関数名
(
引数
,
引数
=
デフォルト値
,
引数
=
デフォルト値
, ...):
...
関数が呼び出された時、値が指定されていない引数には、デフォルト値が引数の値として渡され
ます。
def spam(ham, egg=1, bacon=2):
print(ham, egg, bacon)
spam(0) # spam(0, 1, 2)
と同じ
引数のデフォルト値として、リストなどの更新可能なオブジェクトを指定する場合、注意が必要
です。デフォルト値として指定されたオブジェクトは、その関数を呼び出した時に毎回新しく作成
するのではなく、関数オブジェクトを作成するときに、一度だけ作成されます。関数の引数が省略
されたとき、デフォルトとして渡されるオブジェクトは、常に同じオブジェクトです。
例えば、次の関数では、引数
ham
にはデフォルト引数としてリストオブジェクトが指定されてい
ます。
def spam(ham=[]):
ham.append(1)
print(ham)
引数を指定せずに
spam()
を呼び出すと、そのたびに
ham
で指定されたリストオブジェクトに数
値の
1
が追加されますが、このリストオブジェクトは、関数 ...