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