为什么'真或假'比'假或真'更快?

时间:2015-09-09 08:20:21

标签: python optimization time boolean

我运行了代码

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
  • 为什么布尔评估的顺序会对速度产生影响?
  • 是因为某种形式的优化吗?
  • 如果有,我可以阅读资源吗?

2 个答案:

答案 0 :(得分:6)

这是因为short-circuiting

True or WHATEVER # always True

a的第一个表达式中True首先出现,无需继续。

一种炫酷的方式是使用一段因短路而永远无法运行的代码:

>>> def _print():
...     print "no short circuit"
...
>>> True or _print()
True
>>> False or _print()
no short circuit

答案 1 :(得分:2)

因为or懒惰地评估,并且如果找到True则不再需要检查;如果第一个是False,那么它必须评估下一个表达式,直到找到True或者没有更多的检查。