実践・初級問題チェック

問題 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)