简单的可以理解为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}