什么是Python元组?

4
以下代码未输出我预期的内容:
#!/usr/bin/env python

print type(1,)
a = 1,
print type(a)

以下是输出结果:

<type 'int'>
<type 'tuple'>

我知道逗号会把a转换成一个元组。但是,为什么原始的print语句没有输出一个元组类型而是输出了一个整数呢?
3个回答

9

因为函数调用中的元组语法也是参数传递的方式:

>>> print type(1,2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type() takes 1 or 3 arguments

>>> print type((1,))
<type 'tuple'>

>>> a = 1,
>>> type(a)
<type 'tuple'>

对于Python来说,这是一种语法歧义。它通过决定您正在尝试传递参数来解决这个问题(如果您问我,这应该是一个语法错误)。

>>> print type(1,)
>>> print type(1)

这两个是相同的。


虽然这个观点肯定是有争议的,但在参数列表中包含尾随逗号不会导致“SyntaxError”的原因是为了保持(1,)tuple(1,)以及[1,]list(1,)之间的一致性。 - ncoghlan

1

type()是一个函数,因此Python解析器将把type函数调用括号内的所有内容作为参数元组传递给该函数。

因此,要将字面元组传递给函数调用,您总是需要向元组添加括号,以便解析器识别它为元组:

print type((1,))

0

因为它没有括号:type((1,))

在这种情况下,如果没有额外的括号,它会被视为一个简单的参数列表,并且尾随的分号会被忽略。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接