4
我想知道如果python緩存/編譯它的.pyc文件簡單的算術如5*5+5
。簡單的硬編碼算法緩存/編譯了嗎?
有時我喜歡寫一天if seconds > 24*60*60
例如。我知道對性能的影響並不明顯,但我很好奇。
我想知道如果python緩存/編譯它的.pyc文件簡單的算術如5*5+5
。簡單的硬編碼算法緩存/編譯了嗎?
有時我喜歡寫一天if seconds > 24*60*60
例如。我知道對性能的影響並不明顯,但我很好奇。
是的,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
表達式的最終結果,表達式本身從字節碼中消失。
請注意,僅從可讀性的角度來看,將該計算保存爲合理的標識符是一種可行的方法。此外,您不依賴於實現細節。 – jonrsharpe