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

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

Как они:

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

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

RegexObject.match(string, [pos], [endpos])
RegexObject.match(string[, pos][, endpos])
6
задан orokusaki 5 March 2016 в 22:02
поделиться

5 ответов

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

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

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

Я ожидаю, что нужно будет писать:

r.match("foo",,)

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

RegexObject.match(string[, pos][, endpos])
18
ответ дан 8 December 2019 в 05:55
поделиться

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

2
ответ дан 8 December 2019 в 05:55
поделиться

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

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

Мне пришлось бы сделать:

RegexObject.match("foobar",,)

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

2
ответ дан 8 December 2019 в 05:55
поделиться

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

0
ответ дан 8 December 2019 в 05:55
поделиться

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

0
ответ дан 8 December 2019 в 05:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: