2016-03-19 11 views
4

私は、pythonが5*5+5のような単純な算術の.pycファイルでキャッシュ/コンパイルするかどうかを知りたいと思います。シンプルなハードコーディングされた算術はキャッシュ/コンパイルされていますか?

場合によっては、たとえば、1日にif seconds > 24*60*60と書くことがあります。パフォーマンスへの影響は目立たないが、私は不思議だと思う。

+0

可読性の観点から、その計算を分別可能な識別子に保存するだけです。また、実装の詳細に頼ることもありません。 – jonrsharpe

答えて

7

はい、CPython(Pythonのデフォルト実装)はpeephole optimiserを使用して、そのような式を1つの数値に崩壊させます。これは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を参照してください。

関連する問題