Мне любопытно, почему в Python конечная запятая в списке является синтаксисом, и кажется, что Python просто игнорирует ее:
>>> ['a','b',]
['a', 'b']
Это имеет смысл, когда его кортеж с ('a')
и ('a',)
- это две разные вещи, но в списках?
Мне любопытно, почему в Python конечная запятая в списке является синтаксисом, и кажется, что Python просто игнорирует ее:
>>> ['a','b',]
['a', 'b']
Это имеет смысл, когда его кортеж с ('a')
и ('a',)
- это две разные вещи, но в списках?
Основные преимущества заключаются в том, что он упрощает редактирование многострочных списков и уменьшает беспорядок в diff.
Изменение:
s = ['manny',
'mo',
'jack',
]
в
s = ['manny',
'mo',
'jack',
'roger',
]
включает только однострочное изменение diff:
s = ['manny',
'mo',
'jack',
+ 'roger',
]
Это превосходит более запутанный многострочный diff, когда конечная запятая была опущена:
s = ['manny',
'mo',
- 'jack'
+ 'jack',
+ 'roger'
]
Последний diff затрудняет увидеть, что добавлена только одна строка, а другая строка не изменила контент.
Это также снижает риск этого:
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, похоже, принял это соглашение для своей структуры данных списка. Это особенно полезно при создании кода для заполнения списка: просто сгенерируйте последовательность элементов и запятых, нет необходимости рассматривать последний как специальный случай, который не имеет запятой в конце.
Это помогает устранить определенный тип ошибок. Иногда бывает проще писать списки на нескольких строках. Но, позже, вы можете захотеть переупорядочить предметы.
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')