函数参数解包错误

时间:2013-11-22 15:37:26

标签: python argument-unpacking

看看这个例子(使用python 2.7.6):

>>> def func(a, b, c, d):  
    print a, b, c, d

>>> func(1, c = 3, *(2,), **{'d':4})
1 2 3 4

到此为止,这很好。但是,为什么以下呼叫失败?

>>> func(1, b = 3, *(2,), **{'d':4})

Traceback (most recent call last):
  File "<pyshell#69>", line 1, in <module>
    func(1, b = 3, *(2,), **{'d':4})
TypeError: func() got multiple values for keyword argument 'b'

1 个答案:

答案 0 :(得分:3)

使用其他功能签名可以更好地理解

>>> def func(*args, **kw):
        print(args, kw)


>>> func(1, b = 3, *(2,), **{'d':4})
(1, 2) {'b': 3, 'd': 4}

因此,位置参数被放在一起,关键字参数也是如此。

使用原始签名,表示23都将分配给b,这是无效的。

PS:因为简单的元组解包不提供名称,所以这些值将被视为位置参数。