正斜杠是什么意思/&引用;在Python方法签名中,如帮助(foo)所示?

正斜杠是什么意思/&引用;在Python方法签名中,如帮助(foo)所示?,python,inspection,python-interactive,Python,Inspection,Python Interactive,在由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

在由
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.
我认为这可能与仅关键字参数有关,但事实并非如此。当我用纯关键字参数创建自己的函数时,位置参数和纯关键字参数用
*
分隔(如预期),而不是用
/
分隔。
/
是什么意思?

如前所述,作为参数的“/”标志着仅用于位置的参数的结束(请参阅),即不能用作关键字参数的参数。在
\uuuuu eq\uuuu(self,value,/)
的情况下,斜杠位于末尾,这意味着所有参数仅标记为位置参数,而在
\uuuu init\uuuuu
的情况下,只有self,即无,仅标记为位置参数

编辑: 这以前仅用于内置函数,但您可以在自己的函数中使用。
\
的自然伴侣是
*
,它允许标记仅关键字参数的开头:

# a, b are positional-only. e,f 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