看看关于元组的 Python 教程:
一个特殊的问题是包含 0 或 1 项的元组的构造:语法有一些额外的怪癖来适应这些。空元组由一对空括号构成;一个包含一个项目的元组是通过一个带有逗号的值来构造的(将单个值括在括号中是不够的)。丑陋,但有效。例如:
>>> empty = ()
>>> singleton = 'hello', # <-- note trailing comma
>>> len(empty)
0
>>> len(singleton)
1
>>> singleton
('hello',)
如果您只在字符串对象周围放置一对括号,它们只会将该表达式转换为带括号的表达式(添加了重点):
带括号的表达式列表产生该表达式列表产生的任何内容:如果列表包含至少一个逗号,则产生一个元组;否则,它会产生构成表达式列表的单个表达式。
一对空的括号产生一个空的元组对象。由于元组是不可变的,因此适用于文字规则(即,空元组的两次出现可能会或可能不会产生相同的对象)。
请注意,元组不是由括号组成,而是由逗号运算符组成。一个例外是空元组,它需要括号——在表达式中允许不带括号的“无”会导致歧义,并允许常见的拼写错误通过而未被捕获。
也就是说(假设 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
在打印语句上添加一些注释。当您尝试在 Python 2.7 中创建单元素元组作为printprint (a,)
语句的一部分时(如在 中),您需要使用带括号的形式,因为结尾的逗号print a,
否则将被视为 print 语句的一部分,从而导致换行从输出中抑制而不是创建元组:
一个 '\n' 字符写在末尾,除非 print 语句以逗号结尾。
在 Python 3.x 中,示例中的大多数上述用法实际上都会 raise SyntaxError
,因为在 Python 3 中print
变成了一个函数(您需要添加一对额外的括号)。但尤其是这可能会引起混淆:
print (a,) # <-- this prints a tuple containing `a` in Python 2.x
# but only `a` in Python 3.x