4
私は、pythonが5*5+5
のような単純な算術の.pycファイルでキャッシュ/コンパイルするかどうかを知りたいと思います。シンプルなハードコーディングされた算術はキャッシュ/コンパイルされていますか?
場合によっては、たとえば、1日にif seconds > 24*60*60
と書くことがあります。パフォーマンスへの影響は目立たないが、私は不思議だと思う。
私は、pythonが5*5+5
のような単純な算術の.pycファイルでキャッシュ/コンパイルするかどうかを知りたいと思います。シンプルなハードコーディングされた算術はキャッシュ/コンパイルされていますか?
場合によっては、たとえば、1日にif seconds > 24*60*60
と書くことがあります。パフォーマンスへの影響は目立たないが、私は不思議だと思う。
はい、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を参照してください。
可読性の観点から、その計算を分別可能な識別子に保存するだけです。また、実装の詳細に頼ることもありません。 – jonrsharpe