为什么`(True, True, True) == True, True, True` 在 Python 中不是 True?

A. *_* Dg 14 python boolean-expression

代码片段 1:

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

print(a == b)
Run Code Online (Sandbox Code Playgroud)

返回True

代码片段2:

(True, True, True) == True, True, True
Run Code Online (Sandbox Code Playgroud)

返回(False, True, True)

Ter*_*ryA 19

运算符优先级。您实际上是在检查第二个代码片段之间(True, True, True)True中的相等性,然后使用该结果作为第一项构建一个元组。

回想一下,在 Python 中,通过指定一个逗号分隔的项目“列表”而没有任何括号,它返回一个元组:

>>> a = True, True, True
>>> print(type(a))
<class 'tuple'>
>>> print(a)
(True, True, True)
Run Code Online (Sandbox Code Playgroud)

代码片段 2 也不例外。您正在尝试使用相同的语法构建一个元组,碰巧第一个元素是(True, True, True) == True,第二个元素是True,第三个元素是True

所以代码片段 2 相当于:

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

并且由于(True, True, True) == True是 False(您在此处将三个对象的元组与布尔值进行比较),因此第一个元素变为 False。

  • @NanduRaj 添加了答案,但基本上您是将布尔值元组与布尔值本身进行比较。仅仅因为元组中的所有值都是 true 并不意味着表达式本身是 true :) (如果你想检查这一点,你可以使用 `all((True, True, True))` (2认同)
  • @MoHuss 是的,再次运算符优先级。这相当于“(True, True, (True == True), True, True)” (2认同)

Zab*_*azi 5

这与如何在 python 中评估表达式有关。

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

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

print(type(a))
print(type(b))

print(a == b)
Run Code Online (Sandbox Code Playgroud)

出去:

<class 'tuple'>
<class 'tuple'>
True
Run Code Online (Sandbox Code Playgroud)

因此,它们作为元组进行比较,实际上它们的值相等。

但是对于情况 2,它是从左到右计算的。

(True, True, True) == True, True, True
Run Code Online (Sandbox Code Playgroud)

首先将元组(True, True, True)True哪个 is进行比较False