我是Python的新手,在尝试Python逻辑语句时。我遇到过这个我无法理解的问题。任何人都可以告诉我在Python 2.7中发生了什么。在Python中0和False值之间的区别是什么
>>> 0 or False False >>> False or 0 0
为什么翻译会给出不同的答案?
答案 0 :(得分:6)
您对or
运算符的行为感到困惑;它返回第一个表达式,只有它是 true 值; 0
和False
都不为真,因此返回第二个值:
>>> 0 or 'bar'
'bar'
>>> False or 'foo'
'foo'
任何非数字0的值,空容器None
或False
都被认为是真的(自定义类可以通过实现__bool__
方法(python 3)来改变它,{ {1}}(python 2)或__nonzero__
(长度0为空)。
如果第一个表达式是__len__
:
True
>>> True or 1 / 0
True
表达式会引发1 / 0
异常,但Python甚至不会对其进行评估。
boolean operators documentation:
中记录了这一点表达式
ZeroDivision
首先评估x or y
;如果x
为真,则返回其值;否则,将评估x
并返回结果值。
同样,y
返回第一个表达式and
,否则返回第二个表达式。
答案 1 :(得分:1)
此行为的性质是python的expression evaluation
顺序。 Python从左到右评估表达式 ,并在lazy manner中进行评估。这意味着,当表达式的值为True
时,无论表达式的其余部分是什么,解释器都会到达该点,它将遵循与表达式相关联的工作流的分支。如果所有表达式都不是True
,则只会返回 最近的(最后一个) 。这提供了节省计算资源的好处。请考虑以下代码:
>>>False or False or True or range(10**8)
True
>>>
注意,在这种情况下永远不会调用range(10**8)
,因此节省了大量时间。