python 参数 *与**

来源:互联网 发布:网络技术论坛 编辑:程序博客网 时间:2024/06/15 20:09
*args 表示任何多个无名参数,它是一个tuple**kwargs 表示关键字参数,它是一个dict

注意:同时使用*args和**kwargs时,必须*args参数列要在**kwargs前,
像foo(a=1, b=’2’, c=3, a’, 1, None, )这样调用的话,会提示语法错误“SyntaxError: non-keyword arg after keyword arg”
下面是在python 命令行写的简单测试:

>>> def fun(*args, **kwargs):...     print 'args = ', args...     print 'kwargs = ', kwargs...     print '###'... >>> fun(1,2,3,4)args =  (1, 2, 3, 4)kwargs =  {}###>>> fun(a=1,b=2,c=3,d=4)args =  ()kwargs =  {'a': 1, 'c': 3, 'b': 2, 'd': 4}###>>> fun(1,2,3,4,a=1,b=2,c=3,d=4)args =  (1, 2, 3, 4)kwargs =  {'a': 1, 'c': 3, 'b': 2, 'd': 4}###>>> fun('a', 1, None, a=1, b='2', c=3) args =  ('a', 1, None)kwargs =  {'a': 1, 'c': 3, 'b': '2'}###>>> fun( a=1, b='2', c=3,'a',1,None)  File "<stdin>", line 1SyntaxError: non-keyword arg after keyword arg>>> fun( a=1, b='2', 'a',1,None,c=3)  File "<stdin>", line 1SyntaxError: non-keyword arg after keyword arg>>> 

* 和 ** 也可以用在string.format的时候, 用 ** 后可以直接引用key的值,写起来更简洁

>>> kwargs =  {'a': 1, 'c': 3, 'b': 2, 'd': 4}>>> "a is {kwargs[a]}, b is {kwargs[b]},c is {kwargs[c]} ,d is {kwargs[d]}".format(kwargs=kwargs)'a is 1, b is 2,c is 3 ,d is 4'>>> "a is {a}, b is {b},c is {c} ,d is {d}".format(**kwargs)'a is 1, b is 2,c is 3 ,d is 4'