为什么 `(True, True, True) == True, True, True` 在 Python 中不是 True?
Why is `(True, True, True) == True, True, True` not True in Python?
代码片段 1:
a = True, True, True
b = (True, True, True)
print(a == b)
returns True
.
代码片段 2:
(True, True, True) == True, True, True
returns (False, True, True)
.
Operator precedence。您实际上是在第二个代码片段中检查 (True, True, True)
和 True
之间的相等性,然后构建一个将该结果作为第一项的元组。
回想一下,在 Python 中,通过指定不带任何括号的逗号分隔 "list" 项,它 returns 一个元组:
>>> 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
。
代码片段 1:
a = True, True, True
b = (True, True, True)
print(a == b)
returns True
.
代码片段 2:
(True, True, True) == True, True, True
returns (False, True, True)
.
Operator precedence。您实际上是在第二个代码片段中检查 (True, True, True)
和 True
之间的相等性,然后构建一个将该结果作为第一项的元组。
回想一下,在 Python 中,通过指定不带任何括号的逗号分隔 "list" 项,它 returns 一个元组:
>>> 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
。