【问题标题】:Why 'and' and 'or' behaves differently with 0, 1, True, False? [duplicate]为什么'and'和'or'在0、1、True、False时表现不同? [复制]
【发布时间】:2017-11-11 09:36:26
【问题描述】:

下面是场景。

>>> False and 0
=> False
>>> 0 and False
=> 0

两个条件都一样,为什么返回的结果不一样?

>>> 0 or False
=> False
>>> False or 0
=> 0

同样,两个条件都应该返回相同的结果,但为什么它们不同呢?

同样适用于True1

【问题讨论】:

  • 你在混合布尔值和整数
  • @ΦXocę웃Пepeúpaツ 当我们同时使用 bool 和 int 时,是否有特定的执行顺序?
  • @ΦXocę웃Пepeúpaツ 布尔值在 Python 中是 ints,试试 isinstance(False,int)
  • 正如骗子所说“如果 a 为真,a 和 b 返回 b,否则返回 a。如果 a 为真,a 或 b 返回 a,否则返回 b。”
  • @ΦXocę웃Пepeúpaツ isinstance(False,bool)isinstance(False,int) 返回相同。是不是,布尔值被解释为整数?

标签: python python-3.x logical-operators


【解决方案1】:

在 python 中,and, or 运算符不返回布尔值。他们返回最后评估的东西。由于它们是短路运算符,因此表达式0 and False 需要评估的最后一件事是0。同样,对于0 or False,最后需要检查的是第二个操作数False

来自 python 文档:

  • x or y:如果x 为假,则y,否则x
  • x and y:如果x 为假,则x,否则y
  • not x: 如果x 为假,则为真,否则为假

【讨论】:

  • 如果 where true 那么执行 False and 0 应该返回 0 而不是 False!
  • 不,应该返回False,因为and已经失败了,不需要检查0。
  • OP 向我们展示了 False and 0 实际上返回 False跨度>
  • @ΦXocę웃Пepeúpaツ:再次不,它返回 False。 OP要求False OR 0
  • 不,False and 0 的 OP 的 sn-p 确实按预期产生 False - 它是 False or 0 产生 0(再次按预期)。
【解决方案2】:

Python 条件检查使用Short-Circuit Evaluation。这意味着:

False and 0

它正在执行and 语句,因此两个元素的计算结果都必须为 1。由于 False 没有,它不会检查第二个元素并返回 False。这也适用于0 and False,但由于 0 是第一个元素,它返回 0。

False or 0

在这种情况下,它正在执行or 评估,因此其中一个元素必须评估为 1(或 True)。由于 False 没有,它检查第二个运算符 (0),它的计算结果都不为 1,因此它返回它。这同样适用于0 or False

在这里,您有另一种方法可以消除任何疑问。使用0 or "Text",它返回"Text",因为它的计算结果为True

【讨论】:

    【解决方案3】:

    or 是一个短路运算符,所以它只在第一个参数为假时计算第二个参数。在False or 0 的情况下,第一个参数被评估为 False,然后第二个参数被评估为 0,并返回 0。这对两种情况都有效(0 or False 也是)。

    and 也是一个短路运算符,所以它只在第一个参数为真时计算第二个参数。在False and 0 的情况下,第一个参数被评估为 False,然后第二个不被评估并返回第一个参数,反之亦然。

    了解更多clarification, refer the docs.

    【讨论】:

      猜你喜欢
      • 2021-08-08
      • 1970-01-01
      • 2019-02-08
      • 2015-07-17
      • 2017-04-30
      • 1970-01-01
      • 2019-04-24
      • 1970-01-01
      • 2020-12-15
      相关资源
      最近更新 更多