Почему документы Python содержат запятую после скобки для необязательных аргументов? - PullRequest
6 голосов
/ 23 января 2010

Формат подписей функций в документации по Python немного сбивает с толку. Какой смысл ставить запятую после открытой скобки, а не до? Каково значение вложения скобок?

Как они:

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

Я ожидал бы одно из следующего:

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

Ответы [ 5 ]

17 голосов
/ 23 января 2010

Квадратные скобки означают, что содержимое является необязательным, но все, что находится за пределами квадратных скобок, является обязательным.

С вашей записью:

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

Я ожидал бы написать:

r.match("foo",,)

Вложенность обязательна, потому что если вы предоставляете третий параметр, то вы также должны указать второй параметр, даже если это необязательный параметр. Следующая не вложенная альтернатива будет неоднозначной:

RegexObject.match(string[, pos][, endpos])
2 голосов
/ 23 января 2010

Потому что в противном случае правильный синтаксис будет включать запятую, даже если вы игнорируете аргументы. Части внутри квадратных скобок являются необязательными, поэтому, перемещая запятые из квадратных скобок, они больше не являются обязательными. Например, чтобы вызвать функцию ниже только строкой:

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

Я должен был бы сделать:

RegexObject.match("foobar",,)

Но это не очень элегантно.

2 голосов
/ 23 января 2010

Открытая скобка указывает необязательный аргумент. Если запятая находится за скобками, вам придется набирать ее, даже если вы не хотите использовать аргумент pos (например).

0 голосов
/ 23 января 2010

Скобки означают, что вы можете пропустить часть между ними. Таким образом, если документы будут написаны так, как вы предлагаете, это будет означать, что вы можете написать RegexObject.match (string ,,), оставив все в скобках. Или RegexObject.match (string ,, endpos), просто пропустив второй. Но ты не можешь. Если вы пропустите endpos, вы также должны пропустить запятую перед ним. И если вы пропустите pos, вы должны пропустить запятую перед ней, а также endpos. Так что это написано так, чтобы это было понятно.

0 голосов
/ 23 января 2010

Если вы думаете о скобках, включающих все необязательные компоненты списка аргументов, это имеет больше смысла. По сути, все, что в скобках, может быть оставлено на усмотрение пользователя.

...