为什么位置参数需要在关键字参数之前指定

7 浏览
0 Comments

为什么位置参数需要在关键字参数之前指定

我了解在Python中先传递位置参数,然后再传递关键字参数是一条规则。

这就是为什么下面的代码是错误的:

def fun(x, y):
    print(x, y)
fun3(y=4, 3)
SyntaxError: 位置参数在关键字参数后面

这个也是错误的:

def fun2(**kwargs, *args):
  File "", line 1
    def fun2(**kwargs, *args):
                     ^
SyntaxError: 无效的语法

Python严格检查我是否先传递了位置参数。

我不明白的是为什么会这样。

这难道不是直观的吗:

def test(x, y, z):
    print(x, y, z)

然后以这种方式调用函数:

test(z=3, 1, 2)

应该先将关键字参数z的值设置为3,然后按顺序将1和2分配给尚未分配值的变量x和y。

这甚至不是因为Python不检查变量是否已经分配了值,因为以下代码会报错:

def test2(x, y):
    print(x, y)
test2(1, x=1)
TypeError: test2()的参数'x'传入了多个值

传入了多个值给x。所以Python肯定知道哪些变量已经接收了值。为什么它不能检查哪些变量尚未接收值,然后按顺序为它们分配这些位置参数的值呢?

我在写自己的参考笔记时遇到了困难,无法解释Python这种行为背后的逻辑。

0