您的位置:首页 > 其它

函数的可变参数 *args和**kwargs

2017-10-09 00:26 344 查看
kwargs中的kw就是keyword,即关键字参数。所谓关键字,就是k=v的字典形式。星号类似通配,表示任意多个。

直接上代码,一看便知:

>>> def test(a,b,*args):
...     print('a={},b={},args={}'.format(a,b,args))
...
>>> test(1,2)
a=1,b=2,args=()

>>> test(1,2,3)
a=1,b=2,args=(3,)

>>> test(1,2,3,4,5,6)
a=1,b=2,args=(3, 4, 5, 6)

>>> def test(a,b,**kwargs):
...     print('a={},b={},kwargs={}'.format(a,b,kwargs))
...
>>> test(1,2)
a=1,b=2,kwargs={}

>>> test(1,2,c=1,d=2,e=3)
a=1,b=2,kwargs={'c': 1, 'd': 2, 'e': 3}

当*args和**kwargs同时使用时,*args必须在**kwargs前面,**kwargs在最后面。

>>> def test(a,b,*args,**kwargs):
...     print('a={},b={},args={},kwargs={}'.format(a,b,args,kwargs))
...
>>> test(1,2)
a=1,b=2,args=(),kwargs={}

>>> test(1,2,3,4)
a=1,b=2,args=(3, 4),kwargs={}

>>> test(1,2,c=1,d=2)
a=1,b=2,args=(),kwargs={'c': 1, 'd': 2}

>>> test(1,2,3,4,c=1,d=2)
a=1,b=2,args=(3, 4),kwargs={'c': 1, 'd': 2}

在*args和**kwargs之间还可以有参数。

>>> def test(a,b,*args,c,d=1,**kwargs):
...     print('a={},b={},args={},c={},d={},kwargs={}'.format(a,b,args,c,d,kwargs))
...
>>> test(1,2,3,4,c=5,d=2,e=1,f=2)
a=1,b=2,args=(3, 4),c=5,d=2,kwargs={'e': 1, 'f': 2}

>>> test(1,2,3,4,c=5,e=1,f=2)
a=1,b=2,args=(3, 4),c=5,d=1,kwargs={'e': 1, 'f': 2}

另外,在变量赋值时,也可以使用星号解包。

>>> def test():
...     return tuple(range(10))
...
>>> a,*b,c,d=test()
>>> a,b,c,d
(0, [1, 2, 3, 4, 5, 6, 7], 8, 9)
>>> *a,b,c,d=test()
>>> a,b,c,d
([0, 1, 2, 3, 4, 5, 6], 7, 8, 9)
>>> a
[0, 1, 2, 3, 4, 5, 6]
>>> b
7
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: