简单的硬编码算术是否被缓存/编译掉了?

时间:2016-03-19 19:11:47

标签: python python-internals

我想知道python是否在其.pyc文件中缓存/编译简单的算术,如5*5+5

有时我喜欢写一天if seconds > 24*60*60。我知道对性能的影响是不明显的,但我仍然很好奇。

1 个答案:

答案 0 :(得分:7)

是的,CPython(Python的默认实现)使用peephole optimiser将这些表达式合并为一个数字;这称为constant folding

您可以使用dis disassembler

进行检查
>>> import dis
>>> def foo():
...     if seconds > 24*60*60:
...         pass
...
>>> dis.dis(foo)
  2           0 LOAD_GLOBAL              0 (seconds)
              3 LOAD_CONST               4 (86400)
              6 COMPARE_OP               4 (>)
              9 POP_JUMP_IF_FALSE       15

  3          12 JUMP_FORWARD             0 (to 15)
        >>   15 LOAD_CONST               0 (None)
             18 RETURN_VALUE

注意偏移量为3的LOAD_CONST指令;它加载24*60*60表达式的最终结果,表达式本身就从字节码中消失了。

请参阅fold_binops_on_constants function in the peephole.c file