Blog Post

Python args, kwargs とは


作成日 2023-02-23

目次

概要

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です。
必要になったら使用してください。