(Python)関数の引数の*とか**とか

def f(a, b, c, d=0, e=0):
    print(a + b + c + d + e)    # => 15

def f_args(*args):
    print(type(args))   # => <class 'tuple'>
    print(args)         # => (1, 2, 3)

def f_kwargs(**kwargs):
    print(type(kwargs)) # => <class 'dict'>
    print(kwargs)       # => {'a': 1, 'b': 2, 'c': 3}

array = [1, 2, 3]
dictionary = {'d': 4, 'e': 5}

# (1)
f(*array, **dictionary)

# (2)
f_args(1, 2, 3)

# (3)
f_kwargs(a=1, b=2, c=3)

慣習として、配列の仮引数名は*args、辞書の仮引数名は**kwargsを使う。

(1) 配列は、通常の引数に展開される。辞書は、キーワード引数に展開される。

(2) 通常の実引数は、タプルにマッピングされる。

(3) キーワード引数の実引数は、辞書にマッピングされる。