我一直无法找到一个可以参考的好地方来帮助自己理解 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 函数的一般语法应该是什么样子吗
2 回答
MMTTMM
TA贡献1869条经验 获得超4个赞
您不能同时使用 varargs 参数和特殊*
参数来指示位置参数后面的仅关键字参数。PEP-3102引入了仅关键字语法,表示:
第二个语法更改是允许省略 varargs 参数的参数名称。其含义是允许函数使用仅关键字参数,否则不会采用 varargs 参数。
(强调我的)。
您可以拥有*
或*args
,但不能同时拥有两者。特殊参数的要点*
是,当您还没有 varargs 参数时,允许您拥有仅关键字参数。
慕勒3428872
TA贡献1848条经验 获得超6个赞
*
不是“仅在此指示符之后的关键字”。**
参数后面列出的非参数*
仅是关键字。例如,在以下函数中:
def f(*args, x): ...
x
仅限关键字。
如果您不希望函数采用*args
,则可以使用 bare*
来标记仅关键字参数的开始,但如果您确实想要*args
,则仅关键字参数将在其后。
添加回答
举报
0/150
提交
取消