Pythonの話題:「ばらす」演算子(**)と(*)

Pythonでは可変長の引数を持つ関数を作ることができる。


def func( *arg, **kwarg):
    print(type(arg), arg)
    print(type(kwarg), kwarg)

func(1, 2, 3, k1=10, k2=20, k3=30)

結果の出力:


<class 'tuple'> (1, 2, 3)
<class 'dict'> {'k1': 10, 'k2': 20, 'k3': 30}
>>>

このように「ばらす」演算子(*)、(**)を使う。*argでは位置が固定されている実引数をタプルの形で引き取ることができ、**kwargでは、キーつきの引数を辞書の形で引き取ることができる。キー引数は文字列になっていることに注意。

 

Pythonの話題:辞書の結合

二つの辞書があるときそれらを結合して新たな辞書を作る方法:


>>> d=dict(k1=1, k2=2, k3=3, k4=4)
>>> print(d)
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
>>> d1=dict(k1=1, k2=2)
>>> d2=dict(k3=3, k4=4)
>>> d=dict(**d1,**d2)
>>> print(d)
{'k1': 1, 'k2': 2, 'k3': 3, 'k4': 4}
>>> 

「ばらす」演算子(**)で辞書{‘k1’:1}はキー引数k1=1の形に展開される。文字列が引数名に変わることに注意。こうしてdictの引数にキー引数を与えて、二つの辞書を統合することができる。