无论指定顺序如何,位置参数都将在关键字参数之前分配。在您的情况下,位置参数为(1, 2, 3)
,关键字参数为x=1, a=1, b=2, c=3
。因为首先要分配位置参数,所以参数将x
收到1,并且不再适合使用关键字参数。这听起来有点奇怪,因为在语法上您的位置参数是 在 关键字参数之后 指定的,但是始终遵循“位置参数→关键字参数”的顺序。
这是一个更简单的示例:
>>> def f(x): pass
...
>>> f(1, x=2)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got multiple values for keyword argument 'x'
>>> f(x=2, *(1,))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: f() got multiple values for keyword argument 'x'