python 3.8 或 3.8+ 中函数的一般签名是什么?

我一直无法找到一个可以参考的好地方来帮助自己理解 python 3.8 或 + 中的通用函数签名。我想了解一种通用语法,其中包括仅位置、仅关键字、*args、**kwargs 等。

我能够推理一切,但我似乎无法将 *args 放入通用签名中。

def inc(a:int, b:int,/, c:int=10, d:int=5, *, e:int=15,f:int=3, **kwargs) -> int:
     return None

在这里,无论我将 *args 放在哪里,它都会引发语法错误。我可以删除,*,(仅在该指示符之后的关键字),然后 *args 似乎很适合

你能帮我理解 *args 如何与函数签名的仅位置元素和仅关键字元素相匹配,以及 python 函数的一般语法应该是什么样子吗


慕娘9325324
浏览 106回答 2
2回答

MMTTMM

您不能同时使用 varargs 参数和特殊*参数来指示位置参数后面的仅关键字参数。PEP-3102引入了仅关键字语法,表示:第二个语法更改是允许省略 varargs 参数的参数名称。其含义是允许函数使用仅关键字参数,否则不会采用 varargs 参数。(强调我的)。您可以拥有*或*args,但不能同时拥有两者。特殊参数的要点*是,当您还没有 varargs 参数时,允许您拥有仅关键字参数。

慕勒3428872

*不是“仅在此指示符之后的关键字”。**参数后面列出的非参数*仅是关键字。例如,在以下函数中:def f(*args, x):     ...x仅限关键字。如果您不希望函数采用*args,则可以使用 bare*来标记仅关键字参数的开始,但如果您确实想要*args,则仅关键字参数将在其后。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python