先看*args做了什么:
可以看到func预期只给了三个位置参数来接受*args 解包出来的参数,一旦解包多出3个,也就是报错案例给的4个就会报错:
def func_unpack(*args):
print("get position args is {}".format(args))
print("unpack args to a,b,c three param:")
a,b,c=args
print(a,b,c)
func_unpack(*args)
表示接受任意个与Java Object... 一个原理:
结果:
get position args is (1, 2, 3)
unpack args to a,b,c three param:
再来类推**kwargs:
可以看到:d=4这个没有的位置参数被传给他会报错
接着我们使用**kwargs测试,解包keyword 参数:
结果可以看到
同样再多穿一个关键字参数d=xxx,观察异常解包keyword参数:
结果:
最后我们来任意位置参数解包:
总结:*args,**kwargs其实就是编译器自动为我们解包参数给函数的功能,我们不管实现过程只要把你想传入的参数通过*解包和**解包扔给函数,他就会自动帮你完成解包过程