7

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

它们是怎样的:

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

我期望以下之一:

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

5 回答 5

19

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

用你的符号:

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

我希望必须写:

r.match("foo",,)

嵌套是必需的,因为如果您提供第三个参数,那么您还必须提供第二个参数,即使它是可选参数。以下非嵌套替代方案将是模棱两可的:

RegexObject.match(string[, pos][, endpos])
于 2010-01-22T21:08:59.167 回答
2

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

于 2010-01-22T21:09:05.233 回答
2

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

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

我必须这样做:

RegexObject.match("foobar",,)

但是,这不是很优雅。

于 2010-01-22T21:09:27.353 回答
0

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

于 2010-01-22T21:10:52.523 回答
0

括号意味着您可以省略它们之间的部分。因此,如果按照您建议的方式编写文档,则意味着您可以编写 RegexObject.match(string,,) ,方法是将所有内容都放在括号中。或者 RegexObject.match(string,,endpos) 只需省略第二个。但你不能。如果省略 endpos,则还必须省略它前面的逗号。如果你省略了 pos,你必须省略它前面的逗号以及 endpos。所以它的写法很清楚。

于 2010-01-22T21:11:03.560 回答