Python 为什么星号参数(而不是位置参数)可以出现在关键字参数之后?

Python 为什么星号参数(而不是位置参数)可以出现在关键字参数之后?,python,Python,在Python函数调用中,在关键字one后面加一个星号参数是有效的,该参数由报告,并由以下打印12 def f(a, b): print(a, b) f(b=2, *(1,)) 然而,在关键字1后面加一个位置参数是无效的,如下面的调用所示,该调用会导致SyntaxError f(b=2, 1) 为什么星号参数(而不是位置参数)可以出现在关键字参数之后?为什么位置参数和星号参数的行为方式不同,而星号参数是指定多个位置参数的快捷方式?您自己链接了答案-结果是,尽管*表达式语法可能出现在显式

在Python函数调用中,在关键字one后面加一个星号参数是有效的,该参数由报告,并由以下打印
12

def f(a, b):
   print(a, b)
f(b=2, *(1,))
然而,在关键字1后面加一个位置参数是无效的,如下面的调用所示,该调用会导致
SyntaxError

f(b=2, 1)

为什么星号参数(而不是位置参数)可以出现在关键字参数之后?为什么位置参数和星号参数的行为方式不同,而星号参数是指定多个位置参数的快捷方式?

您自己链接了答案-
结果是,尽管*表达式语法可能出现在显式关键字参数之后,但它是在关键字参数之前处理的(以及任何**表达式参数–见下文)。
+如您所见,您的示例与他们的示例不同。在文档中有
f(a=1,*(2,)
由于求值顺序的原因而失败(
TypeError:f()为关键字参数“a”获取了多个值
)@h4z3根据文档,我知道它失败了。但我仍然不明白为什么
*expression
在关键字参数之前处理,而不是在单位置参数之前处理。我也发现了关于这一点的简短讨论,但没有关于“为什么”的内容这是合法的。|
在关键字参数和非单位置参数之前处理
-???这里的第二部分不是您之前要求的内容?
*
在位置参数处理期间解包参数-
*expr
可能在位置参数之间(
fun(1,*(2,3),4)
)。位置参数总是在关键字参数之前处理,因此“在关键字之前处理而不是位置参数”没有任何意义?@h4z3我的意思是“*表达式在关键字参数之前处理,而单个位置参数在关键字参数之后处理,如果它们出现在参数列表之后”