python 方法的参数列表中的“=- 1”是什么?

What is "=- 1" in a python method's argument list?

在下一页:subprocess.popen,在popen()的参数列表中有一个“pipesize=- 1”。由于它在几个地方弹出,所以它似乎不是错字。

然而,至于这可能是什么,到目前为止我还没有好奇心。

=- 1”是什么意思?

这可能是文档错误。它应该看起来像 pipesize = -1。但是,无论如何,它是参数的默认值。

函数中的参数和参数

默认情况下,函数签名中的所有参数都必须在调用函数时传递参数:

def f(x):
    pass

f("argument for x")

上面的代码将成功 运行,没有任何错误。 x 是函数 f 的必需参数,我正确地将位置参数传递给 x

如果我没有将实参传递给必需的参数会怎样?

当给出此代码时,它会导致异常调用 TypeError:

def f(x):
    pass

f() # TypeError: f() missing 1 required positional argument: 'x'

发生这种情况是因为,如上所述,x 必须根据 f 的当前函数签名传递。

指定可选参数

现在,我将在函数 f:

中为参数 x 提供默认值
def f(x=None):
    pass

f()

此代码也将成功 运行,就像函数 f 的第一个实现一样。但是,这里的函数签名看起来不同,我们在调用 f 时没有传递任何东西。 x=None 说“如果 x 没有在函数调用中传递参数给 f,它应该作为参数传递 None”。

默认与 Non-Default 参数

重要的是要注意,在函数签名中,具有默认值的参数必须出现在所有必需参数之后:

def f(x=None, y):
    pass

f 的实施将导致 SyntaxError: non-default argument follows default argument。在所有 non-default 个参数之后,必须在函数签名中指定默认参数是有道理的。如果 Python 没有为上面 f 的语法错误的函数签名引发错误,我们可能会在我们不想要的时候意外地将参数传递给 x 而不是 y到.