【问题标题】:python comparison, something is going wrongpython比较,出了点问题
【发布时间】:2013-09-01 20:00:42
【问题描述】:

我正在像下面那样在空闲状态下进行测试,但是出了点问题..

>>> print 1<>1
False    OK
>>> print  1<>0
True     OK
>>> print False | True
True     OK
>>> print False | 1<>0
True     OK
>>> print 1<>1 | 1<>0
False   WHY ???

【问题讨论】:

    标签: python python-2.7


    【解决方案1】:

    您正在使用| 按位或 运算符。您可能正在寻找 or 运算符。 or布尔 OR 运算符。

    请注意,&lt;&gt; 已弃用,您真的想使用!=

    >>> 1 != 1
    False
    >>> 1 != 0
    True
    >>> False or True
    True
    >>> False or 1 != 0
    True
    >>> 1 != 1 or 1 != 0
    True
    

    在 Python 中,bool() 类型是 int() 的子类,True 等于 1,False 等于 0,因此在 TrueFalse 上使用按位运算符具有相同的输出好像这些值是整数一样:

    >>> True == 1
    True
    >>> 10 | True
    11
    

    但因为| 的先例高于 !=(或&lt;&gt;),它会被首先执行

    >>> 1 != (1 | 1) != 0
    False
    >>> (1 != 1) | (1 != 0)
    True
    

    or 短路,它返回第一个布尔真值表达式值(集合非空,数值非零)。

    【讨论】:

    • 易于测试此行为:10 | 2 对 10 | 1
    【解决方案2】:

    您的代码被解释为:

    >>> print 1 <> (1 | 1) <> 0
    False
    

    这是因为order precedence,在提供的链接中有详细记录。

    几乎,按位或运算符比不等于运算符&lt;&gt; 具有更高的优先级(请注意,这已被弃用,因此在 Python 3 中不存在。进一步阅读可以找到here)。因此,首先对其进行评估,然后再解释 &lt;&gt;s。

    【讨论】:

      【解决方案3】:

      这是运算符优先级相关问题:

      >>> (1<>1) | (1<>0)
      True
      

      | 的优先级高于&lt;&gt;

      【讨论】:

        【解决方案4】:

        优先级。您的命令被解释为1 &lt;&gt; (1 | 1) &lt;&gt; 0

        顺便说一句,您不应该使用&lt;&gt; 进行比较。请改用!=

        有关更多信息,请查看operators 上的文档。

        【讨论】:

          猜你喜欢
          • 2011-02-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-13
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多