为什么“True or False”比“False or True”更快?

3

我运行了这段代码

a = True
b = False
c = False
d = False
e = False
import time
iterations = int(1e6)
start = time.time()
for _ in range(iterations):
    a or b or c or d or e
print(time.time() - start)
start = time.time()
for _ in range(iterations):
    b or c or d or e or a
print(time.time() - start)

结果

0.10876178741455078
0.26296424865722656
  • 为什么布尔运算的顺序会影响速度?
  • 是因为某种形式的优化吗?
  • 如果是,有什么资源可以阅读?

5
一旦 or 遇到 True,它就会立即短路。 - Alex Riley
3
虽然与之无关,但如果您想学习stdlib中的 timeit 模块... - bruno desthuilliers
@ajcr 短路计算。我之前不知道这个。谢谢。 - arjoonn
2个回答

7
这是因为发生了“短路评估”:

短路评估

True or WHATEVER # always True

在第一个表达式中,aTrue,它先出现了,不需要继续执行。
一个很酷的展示方式是使用一段永远不会运行的代码,因为它采用了短路技术:
>>> def _print():
...     print "no short circuit"
...
>>> True or _print()
True
>>> False or _print()
no short circuit

2
由于or是惰性求值的,如果它发现True,则不需要进行更多的检查;而如果第一个表达式为False,则必须评估下一个表达式,直到找到True或没有更多的检查。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接