Why is `True is False == False`, False in Python?
为什么这些语句在使用括号时按预期工作:
1 2 3 4 5 | >>> (True is False) == False True >>> True is (False == False) True |
但如果没有括号,它会返回
1 2 | >>> True is False == False False |
号
基于关于运算符优先级的python文档:
Note that comparisons, membership tests, and identity tests, all have the same precedence and have a left-to-right chaining feature as described in the Comparisons section.
号
所以实际上,您有一个链接语句,如下所示:
1 2 | >>> (True is False) and (False==False) False |
您可以假定中心对象将在两个操作和其他对象之间共享(在本例中为false)。
请注意,它也适用于所有比较,包括成员资格测试和身份测试操作,这些操作数如下:
1 | in, not in, is, is not, <, <=, >, >=, !=, == |
。
例子:
1 2 | >>> 1 in [1,2] == True False |
在比较运算符方面,python具有唯一的可传递属性。在更简单的情况下会更容易看到。
1 2 | if 1 < x < 2: # Do something |
这就是它看起来的样子。它检查1
1 2 | >>> True is False == False False |
号
它检查"真"是否为"假",而"假"==假,只有一个是"真"。
这是一个双不等式,扩展为
python按照您在数学中所期望的方式解释多个(in)相等:
在数学中,
因此,
对于布尔常数,
如果在计算表达式时遇到具有相同优先级的运算符,则python将执行链接。
comparisons, including tests, which all have the same precedence
chain from left to right
号
下面提到的运算符具有相同的优先级。
1 | in, not in, is, is not, <, <=, >, >=, <>, !=, == |
。
因此,当python试图计算表达式
因此,表达式
1 | (True is False) and (False == False) |
。
以