如果您编写类似的代码:
def test(x,y,z):
return x+y
test(y=10,5,8)
会引发错误:
SyntaxError: positional argument follows keyword argument
所以似乎这是每个人都知道的规则,但是,我还没有找到关于此的清晰直观的解释。
我认为y是关键字参数,然后遵循参数的顺序,所以x为5,z为8。
我想知道为什么我们不能这样做的原因,是否有一个蚂蚁的部分会混淆编译器?
如果可以显示一个示例,那将非常棒!
这是Python编译器的一项限制,目的是减少对幕后字典查找的需求。实际上并没有模棱两可的情况或他们要避免的任何事情。
尽管您可以看到字典查找需要在哪里进行:
def test(x, y):
return x + y
test(y=10, 5)
按照从左上方到右下方的顺序进行编译...
允许kwargs出现在位置args之前:
y=10
kwargs
字典(昂贵)。>>5
。x
是否在kwargs
dict中(昂贵)。x
位置参数。>>[在位置参数之前不允许wkargs:
y=10
kwargs
字典(昂贵)。>>5
。现在考虑使用普通参数的情况,这种情况(可能)很快。
def test(x, y): return x + y test(10, 5)
首先允许使用关键字:
10
。kwarg
格是否为x
(昂贵)。>>x
arg。5
。kwarg
格是否为y
(昂贵)。>>y
arg。Args必须在第一位:
10
。x
arg。5
。y
arg。这种差异不会在Python中编译出来,因为字节代码仍然允许动态函数调用。 Python开发人员决定禁止关键字优先语法,以使该语言在运行时更快。
PS:还有一个论点是,很难将关键字放在位置args之前,但是我将把美学判断留给批评家。我认为看起来不错。