为什么在表达式后添加尾随逗号会创建元组?

44 投票
6 回答
36533 浏览
提问于 2025-04-16 04:21

为什么在一个表达式后面加一个逗号会创建一个包含这个表达式值的 元组 呢?比如在这段代码中:

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

为什么打印出来的结果是 ('mystring',),而不是单纯的 mystring 呢?

6 个回答

6

确保阅读Ben James的这个精彩回答


元组并不是通过括号来表示的。任何表达式都可以放在括号里,这并不是元组特有的。之所以几乎总是需要使用括号,是因为不这样做会造成歧义,这也是为什么元组的__str____repr__方法会显示括号的原因。

举个例子:

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

那单元素元组呢?

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

所以实际上所做的就是创建了一个单元素元组,而不是一个字符串。

文档明确说明:

包含至少一个逗号的表达式列表会生成一个元组。元组的长度就是列表中表达式的数量。这些表达式是从左到右依次计算的。

12

因为这是写一个只有一个元素的元组的唯一方法。对于列表来说,必要的方括号让语法变得很独特,但因为圆括号也可以表示分组,所以把一个表达式放在圆括号里并不会把它变成元组:你需要一个不同的语法元素,在这种情况下就是逗号。

45

这里重要的是逗号,而不是括号。Python 的教程中提到:

一个元组是由多个用逗号分隔的值组成的。

括号在其他地方用来帮助理解,比如当你需要把一个元组放在参数列表中时,可以用括号来区分。

可以查看 Python 教程中关于元组和序列的部分

撰写回答