为什么`(True,True,True)== True,True,True`在Python中不是True? [重复]

问题描述 投票:14回答:2

代码段1:

a = True, True, True
b = (True, True, True)

print(a == b)

返回True

代码段2:

(True, True, True) == True, True, True

返回(False, True, True)

python boolean-expression
2个回答
19
投票

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。


5
投票

这与如何在python中计算表达式有关。

在第一种情况下,ab都是元组。

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)与仅是TrueFalse相比较。

© www.soinside.com 2019 - 2024. All rights reserved.