【问题标题】:Why is 'True or False' faster than 'False or True'? [duplicate]为什么“真或假”比“假或真”快? [复制]
【发布时间】:2015-12-05 02:55:13
【问题描述】:

我运行了代码

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

【问题讨论】:

  • or 一碰到True就会短路。
  • 完全不相关,但如果您想了解 stdlib 的 timeit 模块...
  • @ajcr 短路。我不知道那件事。谢谢。

标签: python optimization time boolean


【解决方案1】:

这是因为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

【讨论】:

    【解决方案2】:

    因为or 的评估是惰性的,如果找到True 则不需要更多检查;而如果第一个是False,则它必须评估下一个表达式,直到找到True 或不再进行检查。

    【讨论】:

      猜你喜欢
      • 2014-09-07
      • 2014-02-17
      • 2019-01-30
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 2018-07-01
      • 1970-01-01
      • 2015-10-05
      相关资源
      最近更新 更多