私が歌川です

@utgwkk が書いている

Pythonのキーワード引数に任意のdictを展開して渡す

Pythonでは、引数に **kwargs のように書くことで、任意のキーワード引数を受ける関数を定義することができる。 キーワード引数はdictとして使うことができる。

def print_kwargs_as_dict(**kwargs):
    print(kwargs)

キーワード引数では、識別子としてvalidな名前の引数しか渡せない。また、任意の文字列や文字列リテラルを使うことはできない。以下の式はいずれも文法エラーになる。

print_kwargs_as_dict(foo/bar='baz')
print_kwargs_as_dict('foo/bar/'='baz')

ところで、Pythonには任意のdictを展開して関数に渡す文法が定義されている。

kwargs = dict(foo='bar')
print_kwargs_as_dict(**kwargs)
# => {'foo':'bar'}

ここで、関数呼び出しの文法を注意深く眺めると、キーワード引数に任意のdictを展開して渡せることが分かる。つまり以下の式はvalidである。

print_kwargs_as_dict(**{'foo/bar':'baz'})
# => {'foo/bar':'baz'}