実践・初級問題チェック
問題 6 /40
引数に関するコードで、エラーにならないものはどれか。
選択 1
def func(a, b, c):
print(a, b, c)
func(1, 2, 3, 4)
選択 2
def func(a, b, c):
print(a, b, c)
func(a=1, b=2, d=4)
選択 3
def func(a, b, c):
print(a, b, c)
func(1, c=3, b=2)
選択 4
def func(a=1, b, c=3):
print(a, b, c)
func(2)
解説
選択肢3が正解です。
【選択肢1】
「TypeError: func() takes 3 positional arguments but 4 were given」のエラーになります。
位置引数は、関数定義時の仮引数の数と、関数呼び出し時の実引数の数を一致させる必要があります。
ここでは、「関数定義時の仮引数」とは「def func(a, b, c):」の引数を指しており、「関数呼び出し時の実引数」とは「func(1, 2, 3, 4)」の引数を指しています。
【選択肢2】
「TypeError: func() got an unexpected keyword argument 'd'」のエラーになります。
キーワード引数は、存在しない仮引数のキーワードを実引数で指定するとエラーになります
ここでは、実引数で「d=4」を指定していますが、仮引数に「d」がないためエラーになります。
【選択肢3】
正しいコードで、結果は「1 2 3」になります。
キーワード引数は、仮引数と実引数で順序が異なっていても、位置引数の後で指定していればエラーにはなりません。
【選択肢4】
「SyntaxError: non-default argument follows default argument」のエラーになります。
仮引数にデフォルト値を指定した場合は、それ以降の仮引数にもデフォルト値を指定する必要があります。
ここでは「a=1」と指定しているため、「b」もデフォルト値を指定する必要があります。
デフォルト値とキーワード引数は、どちらも「=」で定義するためまぎらわしいですが、仮引数で指定するのがデフォルト値付き引数で、実引数で指定するのがキーワード引数です。
(公式書籍 p.52-53)