【问题标题】:Python "is not True" same as "is False"? [duplicate]Python“不为真”与“为假”相同吗? [复制]
【发布时间】:2020-04-29 22:09:29
【问题描述】:

我很好奇 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 编程并不陌生,但我之前没有深入思考过这一点。我可以安全地假设“is not”本身就是一个比“not True”具有更高解析优先级的运算符吗?

【问题讨论】:

标签: python logical-operators


【解决方案1】:

不,不是。 x is not True 将适用于 任何不是单例对象 True 的值 x

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

没错。在反汇编的字节码中其实可以看到这个,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
>>>

【讨论】:

    【解决方案2】:

    is not 是运算符,与is 相反。

    x is not y
    

    意思

    not (x is y) 
    

    它确实不是的意思

    x is (not y)
    

    例如

    4 is not False
    

    (意思是not (4 is False)

    4 is (not False)
    

    False(因为 not False 的计算结果为 True,而不是值 4)。

    【讨论】:

      【解决方案3】:

      是的,在 python 中,is not 是它自己的运算符,而不是 isnot 的组合。 is not 运算符的优先级高于 not 运算符。如果你愿意,你可以在Python's documentation查看这个

      【讨论】:

        【解决方案4】:

        4(不是)Truebool),因为 4 是 4(int)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-01-30
          • 1970-01-01
          • 2015-12-05
          • 2021-05-28
          • 2017-03-24
          • 2017-02-20
          • 1970-01-01
          相关资源
          最近更新 更多