基礎・中級問題チェック
問題 15 /40
次のコードを実行した結果として、正しいものはどれか。
def job(foo, bar):
print(bar, foo)
job(foo=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)