基礎・中級問題チェック

問題 15 /40

次のコードを実行した結果として、正しいものはどれか。

def job(foo, bar):
    print(bar, foo)

job(foo=30, 20)

選択 1

エラーになる。

選択 2

20, 30

選択 3

10, 30

選択 4

30, 20

解説

選択肢1が正解です。

引数は、位置引数を先に記述し、キーワード引数を後に記述する必要があります。

問題文の「job(foo=30, 20)」は位置引数が後になっているため、「SyntaxError: positional argument follows keyword argument」のエラーになります。

以下のように、最終行が「job(30, bar=20)」であればエラーにならず、選択肢2の「20, 30」の結果になります。

-------------------------------
def job(foo, bar):
    print(bar, foo)

job(30, bar=20)
-------------------------------

print文の引数は、どのような順番でも構文としては問題ありません。

なお、以下のように最終行を「job(20, foo=30)」とした場合は、構文エラーになります。

-------------------------------
def job(foo, bar):
    print(bar, foo)

job(20, foo=30)
-------------------------------

位置引数として20を「def job(foo, bar):」のfooに代入した後、さらにキーワード引数として30をfooに代入しようとするため、「TypeError: job() got multiple values for argument 'foo'」のエラーになります。

(公式書籍 p.32-33)