【问题标题】:Logical OR operation with -1-1 的逻辑或运算
【发布时间】:2013-02-14 08:14:18
【问题描述】:

为什么我在python中尝试的以下逻辑操作的输出不同?

-1 or 1
 1 or -1

第一个返回-1,第二个返回1

【问题讨论】:

    标签: python python-2.7 logical-operators


    【解决方案1】:

    andor 都是 懒惰的;他们评估操作数,直到他们可以决定结果(and 停止在第一个 False 操作数;or 停止在第一个 True 操作数)。它们返回评估的最后一个操作数,如 the documentation 中所述:

    请注意,andor 都不会限制它们返回到 FalseTrue 的值和类型,而是返回最后评估的参数。这有时很有用,例如,如果 s 是一个字符串,如果它是空的,则应该将其替换为默认值,则表达式 s or 'foo' 会产生所需的值。

    【讨论】:

      【解决方案2】:

      阅读the documentation

      表达式x or y首先计算x;如果x 为真,则返回其值;否则,将评估 y 并返回结果值。

      【讨论】:

        【解决方案3】:

        第一部分-11 都被评估True 并因此返回。第二部分被忽略。

        【讨论】:

          【解决方案4】:

          or 运算符短路。它返回布尔上下文中的第一个值 True,否则返回最后一个计算的表达式。 -11 在布尔上下文中都是 True,所以你得到第一个数字。

          0None 和所有空容器的计算结果为 False

          例如:

          >>> 0 or 5
          5
          >>> '' or []
          []
          

          【讨论】:

            【解决方案5】:

            or 条件下,如果第一个条件为真,则不评估第二个条件,

            【讨论】:

              【解决方案6】:

              我认为 OP 期望 'or' 的返回值是 True 或 False(就像其他一些语言中的布尔运算符一样。)

              Python 和 Perl 一样,只返回第一个“true”值(其中“true”表示数字非零,字符串非空,非 None 等)

              同样,'and' 返回最后一个值当且仅当两者都是“真”。

              他可能会对这样的结果感到更加惊讶

              {'x':1} or [1,2,3]
              

              Perl 程序员经常习惯性地使用这种结构(如 open(FILE, "foo.txt") || die;我不知道这在 Python 中是否常见。

              (见man

              【讨论】:

                猜你喜欢
                • 2011-08-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2010-12-08
                • 1970-01-01
                • 2015-04-11
                • 1970-01-01
                相关资源
                最近更新 更多