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

Why does adding a trailing comma after an expression create a tuple?

Почему добавление запятой в конце после выражения создает кортеж?

Почему добавление запятой в конце после выражения создает tuple со значением выражения? Например. в этом коде:

>>> abc = 'mystring',
>>> print(abc)
('mystring',)

Почему выводится на печать ('mystring',), а не только mystring?

Переведено автоматически
Ответ 1

Важны запятые, а не круглые скобки. В руководстве по Python говорится:


Кортеж состоит из ряда значений, разделенных запятыми


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

Смотрите Раздел руководства по Python, посвященный кортежам и последовательностям

Ответ 2

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

Ответ 3

Обязательно прочтите этот замечательный ответ Бена Джеймса.



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


Например:

abc = ('my', 'string')
abc = 'my', 'string'

Как насчет одноэлементных кортежей?

abc = ('mystring',)
abc = 'mystring',

Таким образом, фактически то, что вы делали, заключалось в создании одноэлементного кортежа в отличие от строки.

В документации четко сказано:


Список выражений, содержащий хотя бы одну запятую, дает кортеж. Длина кортежа равна количеству выражений в списке. Выражения вычисляются слева направо.


Ответ 4

Распаковка многоэлементного кортежа:

a, b = (12, 14)

print(type(a))

Вывод:


int


Распаковка одноэлементного кортежа:

a, = (12, )

print(type(a))

Вывод:


int


В противном случае:

a = (12,)

print(type(a))

Вывод:


кортеж


2024-01-26 18:16 python