*args和**kwargs
相信大家对于*args和**kwargs并不陌生,当你不确定传入函数中的东西时,可以使用他们哥俩;当然他们所拥有的能力都是来自于神奇的*,arg,kwargs本身并没有这么大的能力;只是python中我们约定俗成的使用他们;也就是说,使用*args和**kwargs只是为了方便并没有强制使用它们。好了,废话不多说,下面进入正题:
通常情况下,我们向函数中传入参数,通常是已经确定的,比如:
此时调用check()函数传入实参1;函数形参a赋值1并引入函数中进行操作;然而在一个形参而传入两个参数时:
此时系统就会告诉我们typeError:因为人家只要了一个参数,你却给我两个;肚子吃的太撑,当然会出bug
而此时我们的*args的作用就体现出来了:
def sb(*args):
for count , thing in enumerate(args):
print('{0}.{1}'.format(count , thing))
sb('zhangsan' , 'lisi' , 'wangwu')
如上所示,不管我们传入多少个参数,我一样吃得下;
相似的,**kwargs允许你使用没有事先定义的参数名:(即字典)
def dsb(**kargs):
for name , value in kargs.items():
print('{0} = {1}'.format(name , value));
dsb(apple = "fruit" , sb = "zhangsan")
综上所述;用通俗的话来讲也就是;*args是管不确定的单个参数的 **kwargs则是对应字典的,也就是键值对;
当然,你也可以两个混着用,但是他们有个怪脾气,那就是*args必须在**kwargs前面: