Python **によるキーワード引数の辞書化

関数定義において、仮引数に**(二つのアスタリスク)を使えば、キーワード引数を1つの辞書にまとめることができるらしい。

さっそく、実験してみる。

(サンプルプログラム1)
test.py

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

foo(power = 100, lang = 'Python', os = 'Linux', cpu = 'Z80B')

(実行結果)

$ python3 test.py
{'cpu': 'Z80B', 'power': 100, 'os': 'Linux', 'lang': 'Python'}

次に、変数powerを直接仮引数で受ける。

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

foo(power = 100, lang = 'Python', os = 'Linux', cpu = 'Z80B')

(実行結果)

$ python3 test.py
100
{'cpu': 'Z80B', 'lang': 'Python', 'os': 'Linux'} # powerが消えた。

powerをキーワード引数ではなく位置引数として指定すると、

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

foo(100, lang = 'Python', os = 'Linux', cpu = 'Z80B')

(実行結果)

$ python3 test.py
100
{'lang': 'Python', 'os': 'Linux', 'cpu': 'Z80B'}

これでも、OK。

(参考文献)
入門Python 3