为什么Python函数文档在可选参数的括号后包含逗号?

为什么Python函数文档在可选参数的括号后包含逗号?,python,documentation,notation,Python,Documentation,Notation,Python文档中函数签名的格式有点混乱。把逗号放在大括号后面而不是前面有什么意义?嵌套括号的意义是什么 它们是怎样的: RegexObject.match(string[, pos[, endpos]]) 我预计会出现以下情况之一: RegexObject.match(string, [pos], [endpos]) RegexObject.match(string[, pos][, endpos]) 方括号表示内容是可选的,但方括号以外的所有内容都是强制性的 用你的符号: RegexOb

Python文档中函数签名的格式有点混乱。把逗号放在大括号后面而不是前面有什么意义?嵌套括号的意义是什么

它们是怎样的:

RegexObject.match(string[, pos[, endpos]])
我预计会出现以下情况之一:

RegexObject.match(string, [pos], [endpos])
RegexObject.match(string[, pos][, endpos])

方括号表示内容是可选的,但方括号以外的所有内容都是强制性的

用你的符号:

RegexObject.match(string, [pos], [endpos])
我希望能写下:

r.match("foo",,)
嵌套是必需的,因为如果提供第三个参数,则必须同时提供第二个参数,即使它是可选参数。以下非嵌套备选方案可能不明确:

RegexObject.match(string[, pos][, endpos])

开括号表示一个可选参数。如果逗号在括号外,即使您不想使用
pos
参数,也必须键入它(例如)。

,因为否则正确的语法将包括逗号,即使您忽略参数。方括号内的部分是可选的,因此通过将逗号移出方括号,它们不再是可选的。例如,要仅使用字符串调用下面的函数:

RegexObject.match(string, [pos], [endpos])
我必须这样做:

RegexObject.match("foobar",,)

但是,这并不是很优雅。

如果您考虑一下包含参数列表中所有可选组件的括号,它会更有意义。基本上,括号内的任何内容都可以由用户自行决定省略。

括号表示可以省略括号之间的部分。因此,如果文档按照您建议的方式编写,则意味着您可以通过将所有内容保留在括号中来编写RegexObject.match(string,,)。或RegexObject.match(string,,endpos),只需省略第二个。但你不能。如果你省略了endpos,你也必须在它前面省略逗号。如果你漏掉了pos,你必须在它前面漏掉逗号和endpos。因此,它的书写方式可以清楚地说明这一点