Pythonの可変長引数を別の関数にそのまま渡す
可変長引数に引数を追加して別の関数に渡す方法。
キーワード可変長引数の変数kwargs (dict型)に要素を足して、
test2(param1, **kwargs)
のようにアスタリスクを2個つけて渡すだけだった。
def test1(param1, **kwargs): print("----------") print("test1 func") print param1 print kwargs kwargs["param4"] = "added in test1()" test2(param1, **kwargs) def test2(param1, **kwargs): print("----------") print("test2 func") print param1 print kwargs test1("tes1", param2="test2", param3="test3")
実行結果
---------- test1 func tes1 {'param3': 'test3', 'param2': 'test2'} ---------- test2 func tes1 {'param4': 'added in test1()', 'param3': 'test3', 'param2': 'test2'}
英語での名称
**args は、
可変長引数
variable length argument
**kwargs は、
キーワード可変長引数
keyworded variable length argument
と呼ぶっぽい。
kwargs の kw は keywordの短縮だった。
キーワード可変長引数を変数に入れる
キーワード可変長引数も引数なのだから、変数に入っているべきなのではないかと思ったけど、
PyCharmのエディタでエラーになる。
def test1_2(param1, **kwargs): print("----------") print("test1_2 func") print param1 print kwargs for key,val in kwargs.items(): exec(key + '=val') print param2
PyCharmのエディタで Unresolved reference 'param2' というエラーになる。
実行はできる。
---------- test1_2 func tes1 {'param3': 'tes3', 'param2': 'tes2'} tes2
変数の名前が決まっているなら、関数定義に足せばいいっぽい。
def test1_2(param1, param2, **kwargs): print("----------") print("test1_2 func") print param1 print kwargs for key,val in kwargs.items(): exec(key + '=val') print param2 test1_2("tes1", param2="tes2", param3="tes3")
https://stackoverflow.com/questions/18090672/convert-dictionary-entries-into-variables-python