Чтобы объяснить, почему я поставил этот вопрос, я объясню общеупотребительные многострочные нотации списка / словаря python3 и как выглядит фактическое определение синтаксиса.
Это наиболее часто используемая нотация многострочного списка в python3:
list_variable = [
'value1',
'value2',
# The last comma after 'value2' is sometimes omitted.
]
И, чтобы понять, как эта нотация распознается синтаксическим анализатором, нам нужно взглянуть на определение грамматики ( ссылка ).
В определении python определения, подобные спискам, определяются следующим образом:
list_like: '[' [element (',' element)* [','] ] ']'
Позвольте мне объяснить это немного подробнее, на тот случай, если вы не знакомы с определением синтаксиса или я плохой обобщитель:
''
означает, что на самом деле это персонаж. Например, '['
и ']'
- это окончание или начало списка в чистых символах, которое будет [ 'value1', 'value2', ] в реальном коде.
element
- ожидаемые элементы их типа. например, если это список, это будет одна переменная. Если это словарь, это будет key ':' value
.
[]
означает все вещи внутри, которые являются необязательными.
()
означает все вещи внутри, которые находятся в одном наборе. то есть все это объединяется.
*
означает предшествующий синтаксис, который может встречаться 0 или более раз. В этом примере (',' element)
может быть опущено, но также может происходить 3 раза.
Я почти забыл упомянуть, что эти правила применяются после того, как управление пробелами выполнено.
Хорошо, давайте посмотрим на пример разбора списка:
[1]
будет проанализирован в '['
element
']'
[1, ]
будет '['
element
','
']'
[1, 2]
будет '['
element
(',' element)
']'
[1, 2, ]
будет '['
element
(',' element)
','
']'
Итак, как вы видите, в примере 3 запятая связана с 2
, а не 1
.
Кроме того, в этом примере последняя запятая не связана с 2
- на самом деле она не связана ни с чем с точки зрения определения синтаксиса.
Теперь актуальный вопрос:
Есть ли еще причины использовать запятую перед символом новой строки, кроме того факта, что большинство языков использовали это обычно?
Я думаю, что целесообразно использовать запятую после новой строки по следующим причинам:
Это больше похоже на фактическое определение синтаксиса.
Это гарантирует, что всегда будет точное количество запятых (количество элементов - 1), и это помогает, когда вы имеете дело с языками, которые ненавидят дополнительные начальные запятые, например, SQL.
Он также удобен для git, как запись до запятой: если вы добавите новый элемент в список, git diff покажет только + , new_element
.
Фактически, в нотации запятая до новой строки, если кто-то забыл добавить запятую после old_element
(или потому что язык не допускает дополнительную запятую), кто-то, кто добавляет элемент после этого, увидит журнал git наподобие это:
- old_element
+ old_element,
+ new_element,