Python 3.5 TypeError:为参数获取了多个值

Jan*_*ora 5 python args optional-arguments python-3.x

def f(a, b, *args):
    return (a, b, args)

f(a=3, b=5)  
(3, 5, ())
Run Code Online (Sandbox Code Playgroud)

然而:

f(a=3, b=5, *[1,2,3])  
TypeError: got multiple values for argument 'b'
Run Code Online (Sandbox Code Playgroud)

为什么会这样?
任何特殊原因?

Jim*_*ard 5

电话的文档中:

如果语法*expression出现在函数调用中,则表达式必须求值为iterable.来自这些迭代的元素被视为它们是附加的位置参数.对于调用f(x1, x2, *y, x3, x4),如果y求值为序列y1, ..., yM,则这相当于具有M+4位置参数的调用x1, x2, y1, ..., yM, x3, x4.

然后,接下来是:

这样做的结果是虽然*expression语法可能出现在显式关键字参数之后,但它在关键字参数之前处理(以及任何**expression arguments- 参见下文).

(强调我的)

因此,Python将首先处理*args作为位置参数,为其赋值b并重新赋值,b=5从而导致具有多个值的关键字参数出错.