python的*args与**kwargs

Posted chen狗蛋儿

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python的*args与**kwargs相关的知识,希望对你有一定的参考价值。

1. *args 允许将一个非键值对的可变数量的参数列表(元组)传递给一个函数。

>>> def add(*args):
...     return sum(args)
...
>>> add(1,2,3,4)
10
>>> a = (1,2,3,4)
>>> add(a) # 错误,等价于sum(((1,2,3,4),)),即将元组a与0相加
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in add
TypeError: unsupported operand type(s) for +: int and tuple
>>> add(*a)
10
>>> sum(((1,2,3,4),))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for +: int and tuple

 

2. **kwargs 允许将一个键值对的可变数量的参数字典传递给一个函数。

>>> def add(**kwargs):
...     return sum(kwargs.values())
...
>>> add(a=1,b=2,c=3)
6

 

综合:

>>> def f(arg,*args,**kwargs):
...     print(arg)
...     print(args)
...     print(kwargs)
...
>>> f(1,*(1,2,3,4),**{"a":1,"b":2,"c":3})
1
(1, 2, 3, 4)
{b: 2, c: 3, a: 1}
>>> f(1,1,2,3,4,a=1,b=2,c=3) # 与上面效果一样

 

 

调用时

def func(a,b,c,d):
    print(a,b,c,d)

args = (1,2,3,4)
func(*args)
1,2,3,4

def func(a,b,c,d):
    print(a,b,c,d)

kargs = {a:1, b:2, c:3, d:4}
func(**kargs)
1,2,3,4

 

以上是关于python的*args与**kwargs的主要内容,如果未能解决你的问题,请参考以下文章

python *args 与 **kwargs

python3进阶之*args与**kwargs用法

python的*args与**kwargs

Python—参数*arg与**kwargs参数的用法

Python代码中func(*args, **kwargs)是啥意思

python中*args和**kwargs学习