print(*args, **kwargs)について

*argsは、位置引数と呼ばれる実引数の種類になります。argsリストのように繰り返すものでなければいけません。
**kwargsは、キーワード引数と呼ばれる実引数の種類になります。kwargs辞書でなければいけません。

  • args[1, 2, 3](必ずリスト)だとすると、print(*args)print(1, 2, 3)と同じです。
    *によりリストが展開されて、括弧が取れています。
  • kwargs{sep: ',', end: ''}必ず辞書)だとすると、print(**kwargs)print(sep=',', end='')と同じです。
    **により辞書が展開されます。
    • print(*args, **kwargs)は、print(1, 2, 3, sep=',', end='')になります。

print(*args, **kwargs)を分解して見ていきましょう。

  • *をつけるとリストを位置引数として展開します。
    • print(*args)は、args == [1, 2, 3]なので、print(1, 2, 3)と同じ意味になります。
  • **をつけると辞書をキーワード引数として展開します。
    • print(**kwargs)は、kwargs == {'sep': '-', 'end': '.'}なので、print(sep='-', 'end='.')と同じ意味になります。
  • このようにprint(*args, **kwargs)は、print(1, 2, 3, sep='-', end='.')と同じ意味になります。
    • このprint関数は、1, 2, 3'-'でつないで、最後に'.'をつけて表示するという意味になります。

代入する引数について

def func2(msg, *args, **kwargs):
  print(‘msg =’, msg) # 位置またはキーワード
  print(‘args =’, args) # 可変長位置
  print(‘kwargs =’, kwargs) # 可変長キーワード
  print()

func2(‘Hello’, 1, 2, ‘3’, name=’Alice’, age=20)

このように記載すると、
msgはキーワード引数または位置引数 1つ目
その後の、1,2、’3’はargに入る。
=でつながているものは kwargs になる

実際の演習

args = list(range(1, 10))
kwargs = {‘sep’: ”}
print(args,kwargs) これだと、print(リスト、辞書)のまま
print(*args,**kwargs) これでちゃんと展開される。**を付けると複数の引数を指定

解答
[1, 2, 3, 4, 5, 6, 7, 8, 9] {‘sep’: ”}
123456789

コメント

タイトルとURLをコピーしました