Python中的args和kwargs

版权声明:如需转载,请注明原文出处,作者: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(如果有默认参数的话,默认参数在位置参数后面)
否则会报错的。

正确示例:

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

猜你喜欢

转载自blog.csdn.net/weixin_42751456/article/details/89004944
今日推荐