python 中*args 和 **kwargs

Posted

tags:

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

简单的可以理解为python 中给函数传递的可变参数,args 是 列表的形式。kwargs 是 key,value的形式,也就是python 中的字典。

*args 必须出现在**kwargs 的前边,否则会抛异常。

 

1 def test(*args, **kwargs):
2     print args
3     print kwargs
1 if __name__ == __main__:
2     print ---test 1---
3     test(1, 2, 3)
4     print ---test 2---
5     test(a=1, b=2, c=3)
6     print ---test 3---
7     data_list = [1, 2, 3]
8     data_dict = {"a":1, "b":2, "c":3}
9     test(*data_list, **data_dict)

输出为:

---test 1---
(1, 2, 3)
{}
---test 2---
()
{a: 1, c: 3, b: 2}
---test 3---
(1, 2, 3)
{a: 1, c: 3, b: 2}

如果将**kwargs 写到了 *args 的前边的时候,程序会报错。

def test2(**kwargs, *args):
    pass

将会报出  

def test2(**kwargs, *args):
                      ^
SyntaxError: invalid syntax

的异常来

 

也可以将函数写成前边有固定想接受的参数,然后后边跟上可变参数,python默认会去自动做匹配。例如:

1 def test3(a, b, *args, **kwargs):
2     print a=, a
3     print b=, b
4     print args=, args
5     print kwargs, kwargs

 

测试代码及输出:

 1 print ---test3-1---
 2 test3(a=1,b=2, c=3, d=4)
 3 print ---test3-2---
 4 test3(1, 2, 3, c=4, d=5)
 5 
 6 
 7 ---test3-1---
 8 a= 1
 9 b= 2
10 args= ()
11 kwargs {c: 3, d: 4}
12 ---test3-2---
13 a= 1
14 b= 2
15 args= (3,)
16 kwargs {c: 4, d: 5}

 

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

python中*args和**kwargs学习

python中*args 和**kwargs的用法

Python中*args 和 **kwargs的用法总结

Python中*args 和**kwargs的用法

python 中*args 和 **kwargs

python函数参数*arg和**kwargs分别代表什么?