Вопрос-Ответ

What is the syntax rule for having trailing commas in tuple definitions?

Каково синтаксическое правило для наличия завершающих запятых в определениях кортежей?

В случае кортежа из одного элемента запятая в конце обязательна.

a = ('foo',)

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

a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
Переведено автоматически
Ответ 1

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

(1)  # the number 1 (the parentheses are wrapping the expression `1`)
(1,) # a 1-tuple holding a number 1

Для более чем одного элемента это больше не обязательно, поскольку совершенно ясно, что это кортеж. Однако запятая в конце допускается, чтобы упростить их определение с использованием нескольких строк. Вы могли бы добавлять в конец или переставлять элементы, не нарушая синтаксис, потому что вы случайно пропустили запятую.

например,

someBigTuple = (
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
#...
10000000000,
)

Обратите внимание, что это применимо и к другим коллекциям (например, спискам и словарям), а не только к кортежам.

Ответ 2

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

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

a = [
"a",
"b"
"c"
]

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

Ответ 3

Еще одно преимущество завершающих запятых в том, что это улучшает внешний вид различий. Если вы начали с

a = [
1,
2,
3
]

и изменил его на

a = [
1,
2,
3,
4
]

Разница будет выглядеть следующим образом

 a = [
1,
2,
- 3
+ 3,
+ 4
]

Тогда как, если бы вы начали с завершающей запятой, например

a = [
1,
2,
3,
]

Тогда разница была бы просто

 a = [
1,
2,
3,
+ 4,
]
Ответ 4

Это необязательно: см. Python wiki .

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

2023-08-07 14:47 python