版权声明:如需转载,请注明原文出处,作者:vergilben https://blog.csdn.net/weixin_42751456/article/details/89004944
*args
和 **kwargs
我在前面学习“类”的过程中遇到过这个东西,当时并没有太在意,但现在我发现许多代码里面都有它们的身影,还是挺重要的,所以就详细地查了查, 在这里解释一下:
当函数的参数不确定时,可以使用
*args
和**kwargs
,*args
没有key值,**kwargs
有key值。这两个是python中的可变参数。*args
表示任何多个无名参数,它是一个tuple;**kwargs
表示关键字参数,它是一个dict。
**注意:**同时使用
args
和**kwargs
时,必须*args
参数列要在**kwargs
前。
比如,你想定义一个函数来求算术和,如果要求几个数的和不确定呢?数量过于庞大怎么办?
用代码展示一下:
def foo(x,*args):
print(x)
print(args)
foo(1,2,3,4,5) #其中的2,3,4,5都给了args
运行结果:
1
(2, 3, 4, 5)
*args
接收了后面四个数值,现在我们可以感受到它的作用了。如果你不确定你会用到多少参数,就用它。
用个例子:
def foo(*args):
print(sum(args))
foo(1,2,3,4,5)
运行结果:15
而**kwargs
,正如上文,我们可以当它是个字典,用代码演示一下:
def foo(x,**kwargs):
print(x)
print(kwargs)
foo(1,y=1,a=2,b=3,c=4) #将y=1,a=2,b=3,c=4以字典的方式给了kwargs
运行结果如下:
1
{'y': 1, 'a': 2, 'b': 3, 'c': 4}
**注意!:**顺序必须是:位置参数、*args
、**kwargs
(如果有默认参数的话,默认参数在位置参数后面)
否则会报错的。
扫描二维码关注公众号,回复:
5777163 查看本文章
正确示例:
def foo(x,*args,**kwargs):
print(x)
print(args)
print(kwargs)
foo(1,2,3,4,y=1,a=2,b=3,c=4) #将1传给了x,将2,3,4以元组方式传给了args,y=1,a=2,b=3,c=4以字典的方式给了kwargs
运行结果:
1
(2, 3, 4)
{'y': 1, 'a': 2, 'b': 3, 'c': 4}
错误示例(顺序错误):
def foo(x,**kwargs,*args):
print(x)
print(args)
print(kwargs)
foo(1,y=1,a=2,b=3,c=4,2,3,4)
运行结果:
SyntaxError: invalid syntax
如需转载,请注明原文出处,作者:vergilben