为什么“元组([0])”打印为“(0,)”?

时间:2015-10-07 17:49:00

标签: python

在python 2中将列表转换为元组时,我注意到将包含单个项目的任何列表转换为元组会在项目后生成逗号。

>>> tuple([0])
(0,)
>>> tuple(['i'])
('i',)

逗号显示的原因是什么?
除了如何打印之外,它是否会引起任何意外行为?

我还注意到必须使用逗号声明单个元组。

>>> (0)
0
>>> (0,)
(0,)

大概这是表达式

>>> 5 * (2 + 3)
25

而不是

>>> 5 * (2 + 3)
(5, 5, 5, 5, 5)

1 个答案:

答案 0 :(得分:2)

这是输出是对象的有效Python表示,这是repr应该产生的。 (str在元组的情况下与repr相同,因为没有令人信服的理由让它们不同。)尾随逗号是必要的,否则它实际上不是元组的表示。 / p>

来自关于repr的Python文档:

  

返回包含对象的可打印表示的字符串。这与转换(反向引号)产生的值相同。能够以普通函数的形式访问此操作有时很有用。对于许多类型,此函数尝试返回一个字符串,该字符串在传递给eval()时会产生具有相同值的对象,否则表示形式是一个用尖括号括起来的字符串,它包含对象类型的名称附加信息通常包括对象的名称和地址。

>>> eval(repr(tuple([0])))
(0,)

如果没有制作逗号,则不会有效。