Python 文档中函数签名的格式有点混乱。将逗号放在左括号之后而不是之前有什么意义?嵌套括号有什么意义?
它们是怎样的:
RegexObject.match(string[, pos[, endpos]])
我期望以下之一:
RegexObject.match(string, [pos], [endpos])
RegexObject.match(string[, pos][, endpos])
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。所以它的写法很清楚。