前段时间我认为元组的构造函数是一对括号()
。
示例:
>>> (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
,为什么在最后的情况下需要括号?
答案 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()可以接受一个或三个参数:
使用括号,您只提供一个参数,一个元组对象,它不会导致错误。