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。
这与如何在 python 中评估表达式有关。
在第一种情况下,a和b都是元组。
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。