布尔值Python值混淆

Ros*_*hta 5 python boolean python-2.7

我是Python的新手,在尝试Python逻辑语句的时候.我遇到过这个我无法理解的问题.任何人都可以告诉我在Python 2.7中发生了什么.在Python中,0和False值之间的区别是什么.

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

为什么口译员会给出不同的答案?

Mar*_*ers 6

您对or操作员的行为感到困惑; 它返回第一个表达式,只有它是一个值; 既不是0也不False是,所以返回第二个值:

>>> 0 or 'bar'
'bar'
>>> False or 'foo'
'foo'
Run Code Online (Sandbox Code Playgroud)

任何非数字0的值,空容器None或被False认为是真的(自定义类可以通过实现__bool__方法(python 3),__nonzero__(python 2)或__len__(length 0为空)来改变它.

如果第一个表达式是True:

>>> True or 1 / 0
True
Run Code Online (Sandbox Code Playgroud)

1 / 0表达式会引发ZeroDivision异常,但甚至不会被Python评估.

这在布尔运算符文档中有记录:

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

同样,and如果是False,则返回第一个表达式,否则返回第二个表达式.