Pythonでは、関数の引数に*args
と**kwargs
を使用することがあります。これらは何を意味するのでしょうか?
まず、args
とkwargs
とは何かを理解しましょう。args
はarguments
(引数)を、kwargs
はkeyword arguments
(キーワード引数)を表します。
*argsについて
*args
は、関数に渡される引数の数が不定である場合に使用します。具体的には、*args
はデフォルト値が設定されていない引数の中で明示的に定義されていないものがタプル型として入ります。
def func(a, b, *args):
print(a)
print(b)
print(args)
func(1 ,2 ,3 ,4 ,5) # 1 2 (3, 4, 5)
func(1, 2) # 1 2 ()
上記の例では、関数func
は2つの引数a
とb
と*args
を取ります。引数の1つ目がa
に、2つ目がb
に入り、残りがタプル型としてargs
に入ります。
**kwargsについて
**kwargs
は、関数に渡されるキーワード引数の数が不定である場合に使用します。具体的には、**kwargs
はデフォルト値が設定されている引数の中で明示的に定義されていないものが辞書型として入ります。
def func(a=1, b=2, **kwargs):
print(a)
print(b)
print(kwargs)
func(a=1 ,b=2, c=3, d=4, e=5) # 1 2 {'c': 3, 'd': 4, 'e': 5}
func(1, 2) # 1 2 {}
上記の例では、関数func
は2つの引数a
とb
と**kwargs
を取ります。引数の1つ目がa
に、2つ目がb
に入り、残りが辞書型としてkwargs
に入ります。
argsと*kwargsの組み合わせ
*args
と**kwargs
を組み合わせて使用することも可能です。この場合、*args
はデフォルト値が設定されていない引数の中で明示的に定義されていないものがタプル型として入り、**kwargs
はデフォルト値が設定されている引数の中で明示的に定義されていないものが辞書型として入ります。
def func(*args, **kwargs):
print(args)
print(kwargs)
func(1, 2, a=3, b=4, c=5) # (1, 2) {'a': 3, 'b': 4, 'c': 5}
以上がPythonの*args
と**kwargs
の基本的な使い方です。これらを理解することで、Pythonの関数の引数の扱いがより柔軟になります。