为什么 'and' 和 'or' 对 0、1、True、False 的行为不同?

Why 'and' and 'or' behaves differently with 0, 1, True, False?

场景如下。

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

两个条件一样,为什么return结果不一样?

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

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

True1

情况相同

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

来自 python 文档:

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

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

False and 0

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

False or 0

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

在这里你有另一种方法可以消除任何疑问。使用 0 or "Text" 它 returns "Text" 因为它计算为 True.

or 是短路运算符,因此它仅在第一个参数为假时才计算第二个参数。在 False or 0 的情况下,第一个参数被评估为 False,然后第二个参数被评估为 0,并且 returns 0。这对两种情况都有效(0 or False 也是) .

and 也是短路运算符,因此它仅在第一个参数为真时才计算第二个参数。在 False and 0 的情况下,第一个参数被评估为 False,然后第二个参数不被评估, returns 第一个参数,反之亦然。

更多clarification, refer the docs.