概述
*args:可变参数,**kwargs字典格式的可变参数;同时使用时,*args必须在*kwargs之前,否则会提示语法错误
一、百变星(*)君之参数打包——*args
常见的例子:
def sum(*args):
sum=0
for item in args:
sum+=item
return sum
if __name__=="__main__":
print(sum(1,2,3,4,5))
可见,*args可以接受NN多个参数,那么args到底是什么呢?参见下面:
def what_is(*args):
print(type(args))
调用此函数,你会发现输出为:<class 'tuple'> #元组类型
其他的使用例子:
def sum2(a,b,c,*args):
sum=0;
sum+=a*b*c
for item in args:
sum+=item
return sum
要求至少输入a、b、c三个参数,调用方法:sum2(1,2,3) 、sum2(1,2,3,4,5,6,7,8,9)
∗的作用:函数接受实参时,按顺序分配给函数形参,如果遇到带∗的形参,那么就把实参打包为(pack)为tuple,并把打包后的tuple分配给带∗的形参(习惯命名为*args)。
二、百变星(*)君之解包——*
看见下面的例子:
def sum(a,b,c,d,e,f):
return a+b+c+d+e+f
if __name__=="__main__":
list=[1,2,3,4,5,6]
print(sum(*list))
*list把list中的元素解包(从list中把所有的元素取出来,然后依次赋值给sum的形参),这就是解包了。那么如果list中元素的个数与sum可接受的形参的个数不匹配怎么办?
见下面的例子:
def sum(a,b,c,d,e,f):
return a+b+c+d+e+f
if __name__=="__main__":
list=[1,2,3,4,5,6,7,8,9,10]
print(sum(*list))
则会报错如下:
Traceback (most recent call last):
File "D:/work/mms/agent_base/tests/tmp.py", line 13, in <module>
print(sum(*list))
TypeError: sum() takes 6 positional arguments but 10 were given
三、百变星星(**)君之参数打包**kwargs
如果明白了上面讲到的*args,那么**kwargs也就不难理解了,但区别还是有的,如下:
简单来说就是:
打包(pack):*args是把多个参数打包成tuple,**kwargs是把k、v参数打包成字典。
拆分(unpack):*args是把打包了的参数依次拆成单个的,依次赋值给函数的形参,**kwargs是把字典的键值拆成单个的,依次赋值给函数的形参。
调用示例:
def sum(**kwargs):
print(kwargs)
if __name__=="__main__":
sum(a=1,b=2,c=3)
输出如下:
{'a': 1, 'b': 2, 'c': 3}
四、百变星星(**)君之解包——**
与*的道理相同,如下:
def sum(a,b,c):
print(a,b,c)
if __name__=="__main__":
sum(**{"c":1,"b":2,"a":3})
输出如下:
3 2 1
至此,应该讲清楚了*args、**kwargs的作用场景及意义
最后
以上就是长情楼房为你收集整理的python中的*args和**kargs一、百变星(*)君之参数打包——*args二、百变星(*)君之解包——*的全部内容,希望文章能够帮你解决python中的*args和**kargs一、百变星(*)君之参数打包——*args二、百变星(*)君之解包——*所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复