为什么元组需要括号?

Goc*_*cht 5 python

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

例:

>>> (1, )
(1, )
>>> type((1, ))
<type 'tuple'>
>>> t = (1, )
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

但现在我知道这是逗号,.

所以,做同上面的事情:

>>> 1,
(1,)
>>> type(1,)
<type 'int'>  # Why?
>>> 1,2,3
(1,2,3)
Run Code Online (Sandbox Code Playgroud)

但如果我这样做:

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

这对我来说很有意义,但是:

>>> t = 1,2,3
>>> type(t)
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

最后:

>>> type((1,2,3))
<type 'tuple'>
Run Code Online (Sandbox Code Playgroud)

这里有一个问题:为什么在最后一个案例中如果元组只是括号需要括号1,2,3

jas*_*per 5

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


hol*_*web 2

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