5

我是 Python 新手,在尝试 Python 逻辑语句时。我遇到了这个我无法理解的问题。谁能告诉我 Python 2.7 中发生了什么。Python 中的 0 和 False 值有什么区别。

>>> 0 或假
错误的
>>> 错误或 0
0

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

4

2 回答 2

6

您对操作员的行为感到困惑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,否则返回第二个表达式。

于 2013-11-04T22:18:29.457 回答
1

这种行为的本质是 python 的顺序expression evaluation。Python从左到右计算表达式,它以一种惰性的方式进行。这意味着,那些解释器到达点,当表达式的值为 时True,无论表达式的其余部分如何,它都会遵循与表达式相关联的工作流分支。如果没有表达式是True,它将简单地返回最近的(最后一个)。这带来了节省计算资源的好处。考虑以下代码:

>>>False or False or True or range(10**8) 
True
>>>

请注意,range(10**8)在这种情况下永远不会调用它,因此可以节省大量时间。

于 2013-11-05T11:51:37.047 回答