首页 > 解决方案 > Python“不为真”与“为假”相同吗?

问题描述

我很好奇 Python 中“x is not True”的优先级。起初,我认为它的意思是“!= True”,但后来我认为“not True”肯定比“is not”具有更高的优先级。然而,以下似乎表明后者:

>>> 4 is not True    
True    
>>> not True    
False     
>>> 4 is False     
False     
>>> 4 is (not True)
False

似乎 Python 将“is not True”解释为单个表达式,而不是“is (not True)”,后者等同于“is False”。

我对 Python 编程并不陌生,但我之前没有深入思考过这个问题。我可以安全地假设“不是”本身就是一个具有比“非真”更高的解析优先级的运算符吗?

标签: pythonlogical-operators

解决方案


不,不是。对于不是单例对象的任何值x is not True都将为真xTrue

似乎 Python 将“is not True”解释为单个表达式,而不是“is (not True)”,后者等同于“is False”。

恰恰。在反汇编的字节码中其实可以看到这个,is not是它自己的比较操作

>>> import dis
>>> dis.dis("x is not True")
  1           0 LOAD_NAME                0 (x)
              2 LOAD_CONST               0 (True)
              4 COMPARE_OP               9 (is not)
              6 RETURN_VALUE
>>>

推荐阅读