Python 方法签名中的正斜杠"/"的含义是什么,如 help(foo) 所示?



help(foo)交互返回的签名中,/是什么意思?

In [37]: help(object.__eq__)
Help on wrapper_descriptor:
__eq__(self, value, /)
    Return self==value.
In [55]: help(object.__init__)
Help on wrapper_descriptor:
__init__(self, /, *args, **kwargs)
    Initialize self.  See help(type(self)) for accurate signature.

我以为这可能与仅关键字参数有关,但事实并非如此。 当我使用仅关键字参数创建自己的函数时,位置参数和仅关键字参数由*分隔(如预期的那样),而不是按/分隔。 /是什么意思?

正如这里所解释的,作为参数的/标志着仅位置参数的结束(请参阅此处),即不能用作关键字参数的参数。在__eq__(self, value, /)的情况下,斜杠在末尾,这意味着所有参数都只标记为位置,而在你__init__的情况下,只有自我,即什么都没有,只是位置的。

编辑:这以前仅用于内置函数,但从 Python 3.8 开始,您可以在自己的函数中使用它。/的自然伴侣是*,它允许标记仅关键字参数的开头。同时使用两者的示例:

# a, b are positional-only
# c, d are positional or keyword
# e, f are keyword-only
def f(a, b, /, c, d, *, e, f):
    print(a, b, c, d, e, f)
# valid call
f(10, 20, 30, d=40, e=50, f=60)
# invalid calls:
f(10, b=20, c=30, d=40, e=50, f=60)   # b cannot be a keyword argument
f(10, 20, 30, 40, 50, f=60)           # e must be a keyword argument

相关内容

  • 没有找到相关文章

最新更新