キーワード引数を辞書として受け取る

入門Python3 4.7.5


関数を定義する時に引数の前に**をつけるとキーワード引数を辞書化して受け取れるようになります。

def foo(**kwargs):
    print(kwargs)

foo()
foo(a=1,b=2,c=3)
$ py main.py
{}
{'a': 1, 'b': 2, 'c': 3}


通常の引数と混ぜて使うことも出来ます、その場合**引数は最後に指定します。

def foo(a,**kwargs):
    print(a)
    print(kwargs)

foo(b=2,c=3,a=1)
$ py main.py
1
{'b': 2, 'c': 3}


さらに*引数によるタプル化とも併用できます。その場合*引数、**引数の順に指定する必要があります。

def foo(*args,**kwargs):
    print(args)
    print(kwargs)

foo(1,2,3,a=1,b=2,c=3)
$ py main.py
(1, 2, 3)
{'a': 1, 'b': 2, 'c': 3}


さらに通常の引数、*引数、**引数、と全部混ぜて使うことも出来ます。

def foo(arg,*args,**kwargs):
    print(arg)
    print(args)
    print(kwargs)

foo(1,2,3,a=1,b=2,c=3)
$ py main.py
1
(2, 3)
{'a': 1, 'b': 2, 'c': 3}


ちなみに辞書化する変数名はPythonの慣習的にkwargsと名付けるのが一般的のようです。