正斜杠是什么意思/&引用;在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