В случае одноэлементного кортежа конечная запятая обязательна.
a = ('foo',)
А как насчет кортежа с несколькими элементами? Кажется, что независимо от того, существует конечная запятая или нет, они оба действительны. Это верно? На мой взгляд, проще редактировать запятую. Это плохой стиль программирования?
a = ('foo1', 'foo2')
b = ('foo1', 'foo2',)
Ответы:
Во всех случаях, кроме пустого кортежа, важна запятая. Скобки требуются только тогда, когда они необходимы по другим синтаксическим причинам: чтобы отличить кортеж от набора аргументов функции, приоритета оператора или разрешения разрывов строк.
Завершающая запятая для кортежей, списков или аргументов функций - хороший стиль, особенно когда у вас есть длинная инициализация, которая разбита на несколько строк. Если вы всегда включаете конечную запятую, вы не будете добавлять еще одну строку в конец, ожидая добавления еще одного элемента, а вместо этого просто создадите допустимое выражение:
Предполагая, что это началось как список из двух элементов, который позже был расширен, он пошел не так, возможно, не сразу очевидным образом. Всегда включайте запятую в конце, и вы избежите этой ловушки.
источник
Это требуется только для одноэлементных кортежей, чтобы исключить неоднозначность определения кортежа или выражения, заключенного в круглые скобки.
Для более чем одного элемента в этом больше нет необходимости, поскольку совершенно ясно, что это кортеж. Однако можно использовать конечную запятую, чтобы упростить их определение с использованием нескольких строк. Вы можете добавить в конец или переставить элементы, не нарушая синтаксиса, потому что вы случайно пропустили запятую.
например,
Обратите внимание, что это относится и к другим коллекциям (например, спискам и словарям), а не только к кортежам.
источник
key: value,
на строку и не заботиться о запятых при добавлении нового материала.Еще одно преимущество конечных запятых в том, что они делают различия более красивыми. Если вы начали с
и изменил его на
Разница будет выглядеть как
Если вы начали с запятой, например
Тогда разница будет просто
источник
Это необязательно: см. Вики Python .
Резюме: одноэлементным кортежам нужна конечная запятая , но это необязательно для многоэлементных кортежей.
источник
Также рассмотрите ситуацию, в которой вы хотите:
Таким образом, в этом случае внешние скобки - это не что иное, как группирующие скобки. Чтобы сделать их кортежем, вам нужно добавить запятую. т.е.
источник
['x', 'y'] * 4
,[ ['x', 'y'] ] * 4
,( ['x', 'y'], ) * 4
Завершающая запятая требуется только для одноэлементных кортежей. Наличие конечной запятой для больших кортежей - это вопрос стиля и не требуется. Его самым большим преимуществом является чистый diff для файлов с многострочными большими кортежами, которые часто изменяются (например, кортежи конфигурации).
источник
Это простой ответ.
a = ("s") - строка
и
a = ("s",) - кортеж с одним элементом.
Python требуется дополнительная запятая в случае одного кортежа элементов, чтобы различать строку и кортеж.
Например, попробуйте это на консоли Python:
a = ("s")
а = а + (1,2,3)
Отслеживание (последний вызов последний):
Файл stdin, строка 1, в модуле
TypeError: невозможно объединить объекты 'str' и 'tuple'
источник
Еще одна причина, по которой это существует, заключается в том, что это упрощает создание кода и
__repr__
написание функций. Например, если у вас есть объект, подобный построенномуobj(arg1, arg2, ..., argn)
, вы можете просто написатьobj.__repr__
какЕсли конечная запятая не разрешена, последний аргумент должен быть особенным. Фактически, вы могли бы написать это в одну строку, используя понимание списка (я написал это дольше, чтобы облегчить чтение). Это было бы не так просто, если бы последний семестр был особенным.
источник
join
в том случае:def __repr__(self): 'obj(' + ', '.join([repr(arg) for arg in obj.args]) + ')'
.join
.PEP 8 - Руководство по стилю для кода Python - Когда использовать конечные запятые
Завершающие запятые обычно являются необязательными, за исключением того, что они являются обязательными при создании кортежа из одного элемента (а в Python 2 они имеют семантику для оператора печати). Для наглядности рекомендуется заключить последнее в (технически избыточные) круглые скобки.
Да:
Хорошо, но сбивает с толку:
Когда конечные запятые являются избыточными, они часто полезны при использовании системы контроля версий, когда ожидается, что список значений, аргументов или импортированных элементов со временем будет расширяться. Шаблон состоит в том, чтобы поместить каждое значение (и т. Д.) В отдельную строку, всегда добавляя запятую в конце, и добавить закрывающую круглую скобку / скобку / фигурную скобку на следующей строке. Однако не имеет смысла иметь конечную запятую в той же строке, что и закрывающий разделитель (за исключением приведенного выше случая одноэлементных кортежей).
Да:
Нет:
источник
Стиль кодирования - ваш вкус. Если вы думаете, что стандарт кодирования имеет значение, существует PEP-8. который поможет вам.
Что вы думаете о результате следующего выражения?
Ага, x - это просто число.
источник