有人能解释为什么单个元素元组被解释为Python中的那个元素吗?
和
为什么他们不打算将元组(1,)
打印为(1)
?
请参阅以下示例:
>>> (1)
1
>>> ((((1))))
1
>>> print(1,)
1
>>> print((1,))
(1,)
答案 0 :(得分:3)
因为示例中只有(1, )
是元组。其余的都是表达方式。
In [4]: type(1,)
Out[4]: int
In [5]: type((1,))
Out[5]: tuple
In [6]: type((1))
Out[6]: int
答案 1 :(得分:2)
这是因为(1)
不是元组。 (1)
是1
,其周围有括号。正如python文档所述
定义元组的是逗号,而不是括号。
唯一没有逗号的元组是0元组,即()
。请注意,您可以通过运行type((1))
并查看它返回<type 'int'>
而不是<type 'tuple'>
来检查此内容。
答案 2 :(得分:1)
单个元素元组永远不会被视为包含的元素。括号主要用于分组,而不是用于创建元组;逗号就是这样。
为什么他们不打印(1,)为(1)?
可能是因为打印内置容器类型提供了一个表示,可以用来重新创建容器对象,比如eval
:
__repr__
的文档提供了一些明确的说明:
如果可能的话,这应该看起来像一个有效的Python表达式 可用于重新创建具有相同值的对象
回答你的问题,(1)
只是整数1
,带有分组括号。为了通过其表示重新创建单例元组,必须将其打印为(1,)
,这是创建元组的有效语法。
>>> t = '(1,)'
>>> i = '(1)'
>>> eval(t)
(1,) # tuple
>>> eval(i)
1 # int
答案 3 :(得分:1)
一个元组由多个以逗号分隔的值(不需要括号)组成。
你甚至可以像这样定义元组
t = 1, # (with or without surrounding parentheses)
>>> type(t)
<class 'tuple'>
这里的 ,
用于告诉解释器创建元组,如果不存在它将被视为 int
。
同样的规则适用于我们这样定义
>>> t = (1)
>>> type(t)
<class 'int'>
答案 4 :(得分:0)
(1)
不是一个元组,它只是一个数字的括号。这是因为有时您想使用括号来表示操作的顺序,例如:(x + y)* z。这显然不是指包含x+y
的元组,只是为了表明添加应该在乘法之前发生。
(((1)))
不是一个元组,括号只是说“在继续之前评估内部的内容”。
print(1,)
只是调用数字1上的print函数。调用函数时,允许使用尾随逗号。但是,在python2中,这可能会引发(1,)
,因为print
不是函数。
print((1,))
是唯一打印元组的东西,因为我们现在实际上将一个元组传递给函数。
答案 5 :(得分:0)
@Ray Total
中非常详细answer当然,一般来说,括号不会改变表达式的含义。例如,你可以说4+(1),它将是5,就像4 *(2-1)将是4一样。因为惯例是使用括号分组子表达式,Python的设计者认为它将是过于混淆意味着意味着分组和单元素元组。 Python也有一个类型函数。实际上,type((2))是int而type((2,))是元组。我们不希望有任何含糊不清的情况,如果(2)被视为元组