为什么 '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相同的结果,但为什么它们不同?
True
和1
情况相同
在 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 第一个参数,反之亦然。
场景如下。
>>> False and 0
=> False
>>> 0 and False
=> 0
两个条件一样,为什么return结果不一样?
>>> 0 or False
=> False
>>> False or 0
=> 0
同样,两个条件应该return相同的结果,但为什么它们不同?
True
和1
在 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 第一个参数,反之亦然。