为什么元组中需要括号?

时间:2015-08-21 21:17:21

标签: python

前段时间我认为元组的构造函数是一对括号()

示例:

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

但现在我知道它是逗号,

所以,做同样的事情:

>>> 1,
(1,)
>>> type(1,)
<type 'int'>  # Why?
>>> 1,2,3
(1,2,3)

但如果我这样做:

>>> type(1,2,3)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: type() argument 1 must be string, not int

这对我有意义,但是:

>>> t = 1,2,3
>>> type(t)
<type 'tuple'>

最后:

>>> type((1,2,3))
<type 'tuple'>

以下是问题:如果元组只是1,2,3,为什么在最后的情况下需要括号?

5 个答案:

答案 0 :(得分:5)

在某些情况下,逗号有另一种含义 - 例如,在函数调用的括号内,它们将参数分开。在元组周围放置一组括号可以保证它在一个简单的表达式上下文中,其中逗号被解释为元组元素分隔符。

答案 1 :(得分:3)

我会说t (1,2,3):

>>> t = 1,2,3
>>> t
(1, 2, 3)
>>> type(t)
<class 'tuple'>

而且t = 1,2,3是明确括号内容的语法糖,这是一种特别适合于元组解包的糖形式。

答案 2 :(得分:2)

因为有时没有括号,表达式将是不明确的:如果没有它们,则使用三个参数进行函数调用。由于某些函数确实需要采用三个参数,因此需要使用不同的表示来表示单个三元素元组参数。碰巧,可以使用一个或三个参数调用type()。在后一种情况下,第一个参数必须是一个类名,所以当它看到一个整数时就会抱怨。

答案 3 :(得分:1)

您使用三个整数调用type,这与重载实现的预期参数不匹配。

答案 4 :(得分:1)

因为没有括号,type()内置函数会解释你给了三个参数而不是一个。

根据python official documentation,type()可以接受一个或三个参数:

  • 类型(对象)
  • type(name,bases,dict)

使用括号,您只提供一个参数,一个元组对象,它不会导致错误。