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}
原文地址:https://www.cnblogs.com/shanys/p/5886931.html