我正在尝试使用Python 3.6中的重载+运算符连接两个元组。如果像第一个示例一样包含括号,我没有问题,但是如果像第二个示例一样省略括号,则会出现错误。我收到的消息是“一元+的错误操作数类型:'tuple'”。谁能解释发生了什么事?
newtup =(3,)+(2,4)
newtup = 3,+(2,4)
答案 0 :(得分:4)
这是一个优先问题。 3, + (2, 4)
被解析为具有元素3
和+(2, 4)
的元组,而不是添加3,
和(2, 4)
的元组。您需要括号。
答案 1 :(得分:3)
它试图将第二行解析为
no is in the dictionary
act is in the dictionary
amp is in the dictionary
Error: The Following Error occured: list index out of range
xibber is NOT in the dictionary
Error: The Following Error occured: list index out of range
xyz is NOT in the dictionary
然后,您看到像(3, + (2,4))
中那样使用一元+
和元组。不允许这样做,因此会出现错误。逗号具有很宽的优先级(即,它们消耗尽可能多的字符,比*更接近+)。其原因在于(a = +5
,biglongexpression1
)切勿将两个biglongexpression2
混在一起。其他所有内容都更重要,应该在逗号之前进行评估,因此biglongexpression
在逗号之前进行评估-因为它是+(2,4)
。
答案 2 :(得分:0)
正在执行的操作:
3, + (2,4)
它基本上简化为两部分3,
和+(2,4)
,第二部分无效,因此您可以尝试在python 3中进行new-unpacking。
(3,*(2,4))
如果在python2上,仅使用第二个示例。
答案 3 :(得分:0)
一元运算符+
期望右侧的操作数有效(int,float等)。
在您的代码3, + (2, 4)
中,您将元组(2, 4)
作为+
的操作数,它不是有效的操作数,因此错误也是如此。
在您的代码中:
newtup = (3,) + (2, 4)
这些是2个独立的元组(3,)
和(2,4)
,因此可以正常工作。
newtup = 3, + (2, 4)
这里是一个包含两个元素3
和+(2, 4)
的单个元组,由于上述原因而失败。
答案 4 :(得分:-1)
简单;在第一行上,您将创建一个由2个元组组成的新元组。 在第二行中,您正在向一个元组添加一个int。检查一下。
x, y=3, (2,4) # assign x and y to 3, and (2,4) respectively
print type(y), type(x)
<type 'tuple'> <type 'int'>