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'}