
Python args, kwargs とは
目次
概要
Python では *args
, **kwargs
についてよく見かけるかと思います。
本記事ではこれらについて解説します。
*args
*
は引数を配列 (list/tuple) にする時、または配列を引数として展開する時に使用するオペレータです。
関数定義で使用した場合、引数指定していない値を一つの配列にします。(tuple)
>>> def single(*args):
... return args
...
>>>
>>> single(1,2,3)
(1,2,3)
また、関数外部から入力した場合、引数指定無しの入力として展開します。
>>> x = [1,2,3]
>>> print(*x) # print(1, 2, 3)
1 2 3
**kwargs
**
は引数を辞書にする時、または辞書を引数として展開する時に使用するオペレータです。
関数定義で使用した場合、引数指定している値を一つの辞書にします。
>>> def example_kwargs(**args):
... return args
...
>>>
>>> example_kwargs(a=1,b=2,c=3)
{'a': 1, 'b': 2, 'c': 3}
また、関数の入力として使用すると値を展開することができます。
>>> def some_func(a,b):
... print(a+b)
...
>>> x={"a": 1, "b": 2}
>>> some_func(**x) # some_func(a=1, b=2)
3
ちょい小技
割り当て
配列を出力した時にも使用できます。
この場合以下のように書きます。
>>> x = [1,2,3,4,5,6]
>>> a, *b, c = x
>>> a
1
>>> b
[2, 3, 4, 5]
>>> c
6
一部のみ抽出
a
だけを取り出すなら、以下のように書きます。
>>> x = [1,2,3,4,5,6]
>>> a, *_ = x
>>> a
1
引数として使用?
NGです。
ごく稀で使うことはありますが、デファクトスタンダードとして使うことは推奨しないです。
理由は関数の意味が理解できなくなるからです。
また、関数に何を入れればいいかがわからないからです。
関数に引数を用意すれば、どんな値を入れればいいかかが想定できます。
*args
, **kwargs
使うと、値が不明になります。
そうすると、関数内のロジックに目を通す必要があります。
また、バグの温床にもなります。
ただ、場合によって必要にあるケースがあります。
(よくググると出てくるのがデコレータとか)
最悪必要になった場合に使ってください。
まとめ
本記事では *args
, **kwargs
について紹介しました。
関数定義以外では結構役に立つことは多々あります。
関数の引数として使用する場合は基本NGです。
必要になったら使用してください。