python 参数 *与**

*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 1
SyntaxError: non-keyword arg after keyword arg
>>> fun( a=1, b='2', 'a',1,None,c=3)
  File "<stdin>", line 1
SyntaxError: 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'
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值