Python方法签名中的正斜杠“/”是啥意思,如help(foo)所示? [复制]

Posted

技术标签:

【中文标题】Python方法签名中的正斜杠“/”是啥意思,如help(foo)所示? [复制]【英文标题】:What is the meaning of a forward slash "/" in a Python method signature, as shown by help(foo)? [duplicate]Python方法签名中的正斜杠“/”是什么意思,如help(foo)所示? [复制] 【发布时间】:2015-03-30 09:32:31 【问题描述】:

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.

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

【问题讨论】:

【参考方案1】:

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

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

# 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

【讨论】:

以上是关于Python方法签名中的正斜杠“/”是啥意思,如help(foo)所示? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Python 方法签名中的 ->(破折号大于箭头符号)是啥意思? [复制]

Python中的正斜杠与反斜杠

python中的正斜杠反斜杠

网址中的两条斜杠是啥意思

require.resolve() 参数中的斜杠是啥意思?

Django 中的 r'^admin/' , 请问中间的斜杠 / 是啥意思, 有啥作用?