代码段1:
a = True, True, True
b = (True, True, True)
print(a == b)
返回True
。
代码段2:
(True, True, True) == True, True, True
返回(False, True, True)
。
Operator precedence。您实际上是在第二个代码段中检查(True, True, True)
和True
之间的相等性,然后构建一个以该结果为第一项的元组。
在Python中,通过指定用逗号分隔的没有任何括号的项目“列表”,它返回一个元组:
>>> a = True, True, True
>>> print(type(a))
<class 'tuple'>
>>> print(a)
(True, True, True)
代码段2在这里也不例外。您正在尝试使用相同的语法构建元组,恰好碰巧第一个元素为(True, True, True) == True
,第二个元素为True
,第三个元素为True
。
所以代码段2等效于:
(((True, True, True) == True), True, True)
并且由于(True, True, True) == True
为False(您在此将三个对象的元组与布尔值进行比较,因此第一个元素为False。
这与如何在python中计算表达式有关。
在第一种情况下,a
和b
都是元组。
a = True, True, True
b = (True, True, True)
print(type(a))
print(type(b))
print(a == b)
输出:
<class 'tuple'>
<class 'tuple'>
True
因此,它们被比较为元组,实际上它们的值都相等。
但是对于情况2,它是从左到右求值的。
(True, True, True) == True, True, True
首先,将元组(True, True, True)
与仅是True
的False
相比较。