为什么我在跑步时得到0" 0和True"或" 0和False"

时间:2014-04-01 18:03:41

标签: python boolean-expression

考虑这段代码:

>>> 0 and True
0
>>> 0 and False
0

为什么在Python中运行上述命令时会得到0

5 个答案:

答案 0 :(得分:7)

and的第一个条件求值为False(在Python中为0时)时,第二个参数根本不被评估,因为and将永远不会成立。这称为短路。在这种情况下,表达式的结果是第一个操作数,在您的情况下为0。

答案 1 :(得分:2)

因为0是一个假值(所有数字0值,以及空容器,NoneFalse)。

and运算符短路;如果左侧表达式的计算结果为false,则返回,否则返回右侧表达式结果。

or运算符执行相同操作,但是对于真正的左手值; 1 or False会返回1

来自Boolean operations文档:

  

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

     

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

您可以方便地使用它:

foo = None
if something_or_other:
    foo = lambda arg: arg * 3

outcome = foo and foo('bar')
outcome = foo or expensive_call()

其中foo仅在实际定义时才被调用,而不是None;仅当expensive_call()尚未绑定到真值时才会调用foo

答案 2 :(得分:0)

你正在与零结盟。你应该总是得到零。

答案 3 :(得分:0)

这是因为逻辑运算符是从左到右进行计算的。因此,对于or如果为True,则查找未评估的表达式的其余部分:

>>> True or "one"
True
>>> False or "one"
'one'

and类似,如果False发现表达式的其余部分被忽略:

>>> True and "one"
'one'
>>> False and "one"
False

在编译器设计中,这个概念称为短路,对于大多数编译器来说这都是相同的设计。

答案 4 :(得分:0)

大多数编程语言具有此功能,它是快速分支检测,在您的情况下and如果第一个条件为假,评估失败,第二个(其他)条件从不检查
在其他情况下or如果第一个条件返回true则第二个(其他)条件永远不会检查,结果将为真 这个样本非常酷,例如:

if( list != null and !list.isEmpty() ) {
    // do stuff
}

如果此功能不存在,则此if语句会导致异常,但现在!list.isEmpty()永远不会在listnull时运行