*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
を'-'
でつないで、最後に'.'
をつけて表示するという意味になります。
- このprint関数は、
代入する引数について
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
コメント