码迷,mamicode.com
首页 > 编程语言 > 详细

python 中*args 和 **kwargs

时间:2016-09-19 23:59:05      阅读:337      评论:0      收藏:0      [点我收藏+]

标签:

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

标签:

原文地址:http://www.cnblogs.com/shanys/p/5886931.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!