基礎・上級問題チェック
問題 14 /40
次のコードを実行したときの処理として、正しいものはどれか。
def job(*args, **kwargs):
for arg in args:
print(arg)
for kwarg in kwargs:
print(kwargs[kwarg])
args = [1, 2]
kwargs = {'three': 3, 'four': 4}
job(*args, **kwargs)
選択 3
[1, 2]
{'three': 3, 'four': 4}
選択 4
1
2
three: 3
four: 4
解説
選択肢2が正解です。
引数のアンパックに関する出題です。
リストや辞書を引数に渡して要素を一つずつ処理したい場合は、「def job(*args, **kwargs)」のように、「*(リストかタプル)」と「**(辞書)」で指定します。
最終行のように、呼び出す際も「job(*args, **kwargs)」と指定します。
「for kwarg in kwargs:」は、「kwargs」に「{'three': 3, 'four': 4}」が代入され、「kwarg」に辞書のキーである「three」と「four」が順番に代入されます。
「print(kwargs[kwarg])」は、「kwargs」に「{'three': 3, 'four': 4}」が代入され、「kwarg」に「three」と「four」が順番に代入されます。
その結果、「kwargs['three']」と「kwargs['four']」となり、値の「3」と「4」を出力します。
なお、最終行を「job(args, kwargs)」とすると、「def job(*args, **kwargs):」の「*args」にタプルの可変長引数「([1, 2], {'three': 3, 'four': 4})」として渡され、「for arg in args:」で一つずつ処理されて、選択肢3の結果になります。
(公式書籍 p.38-39)