2016-03-19 21 views
4

我想知道如果python緩存/編譯它的.pyc文件簡單的算術如5*5+5簡單的硬編碼算法緩存/編譯了嗎?

有時我喜歡寫一天if seconds > 24*60*60例如。我知道對性能的影響並不明顯,但我很好奇。

+0

請注意,僅從可讀性的角度來看,將該計算保存爲合理的標識符是一種可行的方法。此外,您不依賴於實現細節。 – jonrsharpe

回答

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 

注意LOAD_CONST指令偏移量3;它加載了24*60*60表達式的最終結果,表達式本身從字節碼中消失。

查看fold_binops_on_constants function in the peephole.c file