2

看这个例子(使用 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'
4

1 回答 1

3

用另一个函数签名可以更好地理解

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


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

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

使用原始签名,这意味着两者都23被分配给b,这是无效的。

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

于 2013-11-22T15:48:14.163 回答