一开始我还挺困惑的,学习了下,感觉还是很实用的,好来学习下。
*args
args是arguments的缩写,是参数的意思,就表示多个,args可以说是多个参数的意思,当然可以没有,专业点儿就可变参数,通常用在函数定义的时候
def hi(your_name):
print('hi,',your_name)
hi('lufei')

上面这个hi函数,就是接收一个参数,然后输出一句话,假设,我现在想要传多个名字,我也不知道有几个,都输出这样一句话,也就是说,参数是变化的,咋搞呢?
args就来了,args在Python中就表示可变参数,我们来用下
def hi(*args):
for s in args:
print('hi,',s)
hi('lufei','namei','世界')

是不是很有意思
这个*号,会将我们的参数放到一个元组当中
def hi(*args):
print(args)
print(type(args))
hi('lufei','namei','世界')

上面说的是函数定义中的使用,在函数调用的时候,也是可以用*号的,这个场景感觉应该不会太多,这里简单看下
def hi(s1,s2,s3):
print(s1,s2,s3)
a=('lufei', 'namei', '世界')
hi(*a)

也就是说,这个*号,自动将我们的元组拆解,调用的时候是拆解,定义的时候是组装,我记得Java里有个自动装箱拆解的特性,不知道是不是同样的原理和概念
**kwargs
在理解了*args之后,这个kwargs道理是一样的
kwargs表示keyword arguments,这个是键值对,也就是参数名和参数值一起传入的
def say(**kwargs):
for k,v in kwargs.items():
print(k,'=',v)
say(name='lufei',age=13)

至于原理差不多,也是做了一个自动组装,变成了字典

在函数调用的时候,可以用来拆包
需要注意的是,如果args和kwargs一起使用,args一定要在**kwargs前面