案例1:
def foo(*args, **kwargs):
print(args)
print(kwargs)
foo(1, 2, a=1)
/*结果
(1,2)
{"a":1}
*/
解析:
- 函数*args会将传入的参数1和2封装成元组(1,2), 即args = (1, 2)
- 函数**kwargs会将参数a=1分装分字典{"a":1}, 即kwargs = {"a":1}
案例2:
def foo1(*args, **kwargs):
print(args)
print(kwargs)
def foo(*args, **kwargs):
foo1(args, kwargs)
foo1(*args, **kwargs)
foo(1, 2, a=1)
/*结果:
((1, 2), {'a': 1})
{}
(1, 2)
{'a': 1}
*/
分析:
- foo1(args, kwargs)实际上传递的参数是foo1((1, 2), {"a":1}), 所以调用foo1函数时候,(1,2), {"a":1}会被归并到元组,再加个括号上去
- foo1(*args, **kwargs)实际上传递的参数是foo1(1, 2, a=1), 函数内部使用*args是将元组类型的args = (1, 2)解成1,2, **kwargs将字典类型的kwargs = {"a":1}解成a=1