Почему в списке разрешены конечные запятые?
мне любопытно, почему в Python конечная запятая в списке является допустимым синтаксисом, и кажется, что Python просто игнорирует его:
>>> ['a','b',]
['a', 'b']
имеет смысл, когда его кортеж с ('a')
и ('a',)
это две разные вещи, но в списках?
5 ответов:
основные преимущества заключаются в том, что он упрощает редактирование многострочных списков и уменьшает беспорядок в различиях.
изменения:
s = ['manny', 'mo', 'jack', ]
to:
s = ['manny', 'mo', 'jack', 'roger', ]
включает в себя только одну строку изменения в diff:
s = ['manny', 'mo', 'jack', + 'roger', ]
это бьет более запутанный многострочный diff, когда конечная запятая была опущена:
s = ['manny', 'mo', - 'jack' + 'jack', + 'roger' ]
последнее различие затрудняет понимание того, что была добавлена только одна строка и что другая строка не изменилась содержание.
это также снижает риск сделать это:
s = ['manny', 'mo', 'jack' 'roger' # Added this line, but forgot to add a comma on the previous line ]
и пусковым неявная конкатенация строковых литералов, производства
s = ['manny', 'mo', 'jackroger']
вместо предполагаемого результата.
Это общее синтаксическое соглашение, позволяющее завершать запятые в массиве, языки, такие как C и Java, позволяют это, и Python, похоже, принял это Соглашение для своей структуры данных списка. Это особенно полезно при создании кода для заполнения списка: просто создайте последовательность элементов и запятых, не нужно рассматривать последний как особый случай, который не должен иметь запятую в конце.
это помогает устранить определенный вид ошибки. Иногда яснее писать списки на нескольких строках. Но в дальнейшем maintenace вы можете изменить порядок элементов.
l1 = [ 1, 2, 3, 4, 5 ] # Now you want to rearrange l1 = [ 1, 2, 3, 5 4, ] # Now you have an error
но если вы разрешите конечные запятые и используете их, вы можете легко переставить строки без введения ошибки.
кортеж отличается тем, что
('a')
расширяется с помощью неявного продолжения и()
с оператором приоритет, в то время как('a',)
относится к кортежу длиной 1.ваш оригинальный пример был бы
tuple('a')
основная причина состоит в том, чтобы сделать diff менее сложным. Например, у вас есть список :
list = [ 'a', 'b', 'c' ]
и вы хотите добавить еще один элемент к нему. Тогда вы будете в конечном итоге делают это:
list = [ 'a', 'b', 'c', 'd' ]
таким образом, diff покажет, что две строки были изменены, сначала добавив', ' в строке с 'и добавив' d 'в последней строке.
таким образом, python позволяет трейлинг', ' в последнем элементе списка, чтобы предотвратить дополнительные различия, которые могут вызвать путаницу.