在Python中(我只检查了Python3.6,但我相信它也适用于许多以前的版本):
(0,0)==0,0#生成一个两元素元组:(False,0)
0,0==(0,0)#生成一个两元素元组:(0,False)
(0,0)=(0,0)#结果为布尔真
但是:
a=0,0
b=(0,0)
a==b#结果为布尔真
为什么这两种方法的结果不同?相等运算符处理元组的方式是否不同
前两个表达式都解析为元组:
(0,0)=0(即False),后跟00,然后是0==(0,0)(仍然是False)
由于逗号分隔符相对于相等运算符的相对优先级,表达式被这样分割:Python看到一个元组包含两个表达式,其中一个恰好是相等测试,而不是两个元组之间的相等测试
但是在第二组语句中,a=0,0不能是元组。元组是值的集合,与相等测试不同,赋值在Python中没有值。赋值不是表达式,而是语句;它没有可以包含在元组或任何其他周围表达式中的值。如果您尝试类似于(a=0),0的方法来强制解释为元组,您将得到一个语法错误。这使得元组分配给变量成为了a=(0,0)的唯一有效解释,而变量可以通过编写a=(0,0)变得更加明确
因此,即使没有对a赋值的括号,它和b都被赋值(0,0),因此a==b是真的