関数の引数に *args や **kwds
を指定した場合の挙動をいつも忘れてしまうので,例と共に書いておく.
def f(*args, **kwds):
print args
print kwds上のような関数は, args は変数名なしの引数をタプルとして受け取り,
kwds は変数名付きで辞書型として受け取る.
f(1,2,3,4,a='a',b='b')::: parsed-literal (1, 2, 3, 4) {‘a’: ‘a’, ‘b’: ‘b’} :::
下のように,タプルと辞書を明示的に渡してやっても,受け取り側は二つの変数名なしの変数を受け取ったと考えるので,
*args として (arr,dic) を受け取ったと解釈する.
arr = (1,2,3,4)
dic = {'a':10, 'b':20}
f(arr,dic)::: parsed-literal ((1, 2, 3, 4), {‘a’: 10, ‘b’: 20}) {} :::
以下のようにすると arr を展開して args として, dic を展開して
kwds として渡すことができる.
f(*arr,**dic)::: parsed-literal (1, 2, 3, 4) {‘a’: 10, ‘b’: 20} :::