Посмотрите на Python tutorial on tuples:
Особой проблемой является построение цепочек, содержащих 0 или 1 пункты: синтаксис имеет некоторые дополнительные причуды, чтобы приспособить их. Пустые кортежи создаются пустой парой круглых скобок; кортеж с одним элементом создается, следуя значению с запятой (недостаточно заключить в круглые скобки одно значение). Уродливый, но эффективный. Например:
>>> empty =()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
Если поставить только пару скобок вокруг строкового объекта, они будут только превратить это выражение в parenthesized expression (курсив добавлен):
выражение в скобках список урожайности независимо от того, что дает этот список выражений: если список содержит хотя бы одну запятую, он дает кортеж; в противном случае он дает единственное выражение, которое составляет список выражений.
Пустая пара круглых скобок дает пустой объект кортежа. Поскольку кортежи неизменяемы, применяются правила для литералов (т. Е. Два вхождения пустого кортежа могут или не могут дать тот же объект).
Обратите внимание, что кортежи не формируются скобками, а используются с помощью оператора запятой. Исключением является пустой кортеж, для которого требуются круглые скобки, что позволяет безраздельно «ничего» в выражениях вызывать неоднозначность и допускать, что общие опечатки проходят неотображаемые.
То есть (предполагается, что Python 2.7),
a = 'Quattro TT'
print tuple(a) # <-- you create a tuple from a sequence
# (which is a string)
print tuple([a]) # <-- you create a tuple from a sequence
# (which is a list containing a string)
print tuple(list(a)) # <-- you create a tuple from a sequence
# (which you create from a string)
print (a,) # <-- you create a tuple containing the string
print (a) # <-- it's just the string wrapped in parentheses
Выход, как и ожидалось:
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
('Q', 'u', 'a', 't', 't', 'r', 'o', ' ', 'T', 'T')
('Quattro TT',)
Quattro TT
Чтобы добавить некоторые заметки на заявлении для печати. Когда вы пытаетесь создать одноэлементный кортеж как часть инструкции print в Python 2.7 (как в print (a,)
), вам нужно использовать форму в скобках, потому что конечная запятая print a,
будет также считаться частью оператора печати и, следовательно, новая строка должна быть подавлена с выхода, а не с создаваемого кортежа:
Символ '\ n' записывается в конце, если оператор печати не заканчивается запятой.
В Python 3.x большинство из выше приведенных в примерах фактически поднять SyntaxError
, потому что в Python 3 print
turns into a function (вам нужно добавить дополнительную пару скобок). Но особенно это может вызвать путаницу:
print (a,) # <-- this prints a tuple containing `a` in Python 2.x
# but only `a` in Python 3.x
Ожидаемый результат должен быть '('Quattro TT',)'; примечание: запятая. – jfs
Строка не преобразуется в кортеж, она содержится в кортеже. – moooeeeep
@ J.F.Sebastian Разве это имеет значение? В чем разница btw ('Quattro TT',) и ('Quattro TT')? – Shankar