2016-10-09 3 views
0

В «6.1.3 Формат Строка Синтаксис» в Python 3.5.2 документации, то field_name для грамматики замены поля для str.format() записывается так:Что означает звезда в значении field_name в документе Python str.format()?

field_name  ::= arg_name ("." attribute_name | "[" element_index "]")* 

Что делает звезду на очень правильном среднем ? Я могу догадаться, что могу получить атрибут объекта с arg_name.attribute или элементом с arg_name[element_index], но я не знаю, добавляет ли эта дополнительная звезда, что я могу сделать больше с объектом. Я предполагаю, что это означает, что .attribute_name и [element_index] являются необязательными, но я думал, что круглые скобки уже подразумевали это.

+3

Я предполагаю, что '*' означает, что '(". "Attribute_name |" ["element_index"] ")' может повторяться любое количество раз, включая 0. – vaultah

+0

@vaultah Я думаю, что вы правы. Знаете ли вы, где в документах описывается '*'? Я помню, что видел его где-то там, я не знаю, где именно. – DragonautX

+1

@vaultah вы правы. – furas

ответ

1

Python Language Reference, section 1.2. говорит:

Описания лексического анализа и синтаксиса используют модифицированную BNF грамматику обозначения. При этом используется следующий стиль определения:

name  ::= lc_letter (lc_letter | "_")* 
lc_letter ::= "a"..."z" 

Первая строка говорит о том, что name является lc_letter следует последовательность из нуля или более lc_letter с и подчеркиванием. В свою очередь lc_letter - любой из одиночных символов 'a' - 'z'. (Это правило фактически придерживалась для имен, определенных в лексических и грамматических правил в этом документе.)

Каждое правило начинается с имени (которое является именем, определенным правилом) и ::=. Для разделения альтернатив используется вертикальная полоса (|); это наименее связывающий оператор в этих обозначениях. Звезда (*) означает ноль или более повторений предыдущего пункта; Аналогично, плюс (+) означает одно или несколько повторений, а фраза, заключенная в квадратные скобки ([ ]), означает ноль или один случай (другими словами, прилагаемая фраза является необязательной). Операторы * и + связываются максимально плотно; круглые скобки используются для группировки. Литеральные строки заключены в кавычки. Белое пространство имеет смысл только для разделения токенов. Правила обычно содержатся в одной строке; правила со многими альтернативами могут быть отформатированы поочередно с каждой строкой после первого начала с вертикальной полосой.

Таким образом, звездочка * означает, как и ожидалось, ноль или более повторений предыдущей группы.

+0

Я думаю, вы хотели скопировать следующий абзац, в котором говорилось о звезде, но я по-прежнему буду принимать ваш ответ, так как вы дали ссылку. Благодарю. – DragonautX

+1

@DragonautX Правильно, я добавил это к ответу. – zvone

Смежные вопросы