函数调用时:* **的作用就是解包,把一个整体(元组或字典)分解成一个个个体,生成多个参数,与位置参数或默认参数对应。如果没有传*号,它就是一个个体,一个参数。
def test_kwargs(first, *args, **kwargs):
print('first:',first)
print('args:',args)
print('kwargs:',kwargs)
arg=(2, 3, 4)
kw={'k1':5, 'k2':6}
test_kwargs(1,arg,kw ) #这里传arg,kw之后,要经过打包成一个元组,认为是一个参数
#first: 1
#args: ((2, 3, 4), {'k1': 5, 'k2': 6})
#kwargs: {}
test_kwargs(1,*arg,**kw )#这里传*arg,**kw之后,要经过解包。**kw相等于k1=5,k2=6。 这里必须时**kw,而不是*kw。
#first: 1
#args: (2, 3, 4)
#kwargs: {'k1': 5, 'k2': 6}
test_kwargs(1,*arg,*kw ) #如果字典标记一个*,也很合并到args中,并且只有key值。
#first: 1
#args: (2, 3, 4,'k1','k2')
#kwargs: {}
test_kwargs(1,kw=kw )
#first: 1
#args: ()
#kwargs: {'kw': {'k1': 5, 'k2': 6}} #重组
-----------------------------------------------------解包
def test_args_kwargs(arg1, arg2, arg3):
print("arg1:", arg1)
print("arg2:", arg2)
print("arg3:", arg3)
args = ("two", 3, 5)
test_args_kwargs(*args)
kwargs = {"arg3": 14, "arg2": "two", "arg1": 5}
test_args_kwargs(**kwargs)
---------------------------------------------------------------