为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕娘9325324 2023-11-09 21:42:54
我一直无法找到一个可以参考的好地方来帮助自己理解 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 参数时,允许您拥有仅关键字参数。


查看完整回答
反对 回复 2023-11-09
?
慕勒3428872

TA贡献1848条经验 获得超6个赞

*不是“仅在此指示符之后的关键字”。**参数后面列出的非参数*仅是关键字。例如,在以下函数中:

def f(*args, x):
    ...

x仅限关键字。

如果您不希望函数采用*args,则可以使用 bare*来标记仅关键字参数的开始,但如果您确实想要*args,则仅关键字参数将在其后。


查看完整回答
反对 回复 2023-11-09
  • 2 回答
  • 0 关注
  • 114 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信