Pythonコード(または任意のコード)の最適化に関しては、ボトルネックや機能の低下を最適化するためにプロファイリングが終了することがよくあります。しかし、これらのコード領域を最適化する場合、純粋なPythonを使用するためのユースケースはありますかバイトコードインライン? 組み込み関数とcompiler
モジュールを使用してこれを行うことができます。bytecodeによるPythonの最適化
答えて
...純粋なPythonバイトコードのインラインを使用するためのユースケースはありますか?
はい。場合によっては、Pythonが通常独自に生成するよりも少し速いコードをハンドリングすることができます。
また、リスト内包のループ誘導変数にアクセスできます。ここで
は、あなたが始めるためにいくつかのリンクです:https://www.google.com/search?q=python+bytecode+hacks
あなたがプログラムでバイトコード操作をしたい場合は、ここではそれについて移動する方法を示した最適化のレシピです:Decorator for BindingConstants at compile time
言いました、スピードが気になる場合は、最も単純なスピードアップは、cpythonの代わりにpypyを実行することがよくあります。
いいえ。ソースコードは、モジュールが最初にロードされたときに1回のみバイトコードにコンパイルされます。バイトコードは、実行時に解釈されるものです。たとえバイトコードをソースにインライン化することができたとしても、Pythonがソースコードをバイトコードに変換するのに費やした時間を減らすことによって、プログラムの起動時間に影響を与えることに過ぎません。コードの実行速度は実際には変化しません。例えば、1000回実行されるループの「純粋なバイトコード」バージョンは、Pythonソースコードで書かれた同じループより速く実行されません。 this similar questionおよびthis oneを参照してください。
compile
およびcompiler
は、プログラムの実行中に文字列から新しい実行可能ソースコードを動的に作成できるように存在します。これはパフォーマンス上の利点ではありません。それを行う方法が他にないからです。 Pythonプログラムを実行すると、Pythonはそのソースコードをバイトコードにコンパイルします。しかし、ソースコードに直接存在しない新しい関数を動的に作成したい場合(例えば、コード断片を混ぜ合わせたり、一致させたり、ユーザーがプログラムの実行中にコードを入力できるようにする)、コンパイルする方法が必要ですオンザフライで、それはcompile
のためです。 (これは実際に一般的な必要性ではないので、頻繁に使用されることはありません)。
- 1. Javaの最適化:bytecode-only対JIT
- 2. Pythonのジェネレータインデックスの最適化
- 3. コーディングによる最適化
- 4. UpdateTimestampsCacheによる最適化
- 5. フォールディングによる最適化
- 6. 最適化Pythonのパンダコード
- 7. パンダの最適化groupby python
- 8. シャドーキャストPythonの最適化
- 9. Pythonの離散最適化
- 10. Pythonでのマルチスレッド最適化
- 11. Pythonのループのために最適化
- 12. Pythonフィッティング:最適化ループ
- 13. Pythonカーブフィッティング最適化GUI
- 14. python appengine memcache最適化
- 15. Python最適化データ構造
- 16. 最適化ハミング距離Python
- 17. numpyコロン記法によるPythonコードの最適化
- 18. Python:モジュールのインポートを最適化する
- 19. SQL最適化最適化?
- 20. Python:マシンコードにコンパイルするよりもBYTECODEにコンパイルする利点?
- 21. Python可視化最適化パラメータ
- 22. julia one-linerをPythonと同じように最適化する
- 23. サブレンジタイプによるコンパイラの最適化
- 24. パフォーマンスの最適化によるコレクションコレクション
- 25. Pythonコードを最適化する
- 26. Pythonで辞書を最適化する
- 27. Python 2.7でフィルタリングリストを最適化する
- 28. Pythonのlru_cache使用量の最適化
- 29. PythonでのDFSの最適化
- 30. ループのためのPythonを最適化
インラインアセンブラを使用してCコンパイラと同じマシンコードを書くのと同じように、同じ*バイトコードのPythonを書くつもりはありません。ポイントは、より良いバイトコードを書くことです。 – user2357112
@ user2357112:以下の答えは理論的には可能かもしれないが、 'compile'はPythonのソースコードを文字列からコンパイルするだけなので、' compile'を使うことはできません。文字列を 'compile'に渡すことにより、より良いバイトコードを得ることができれば、そのソースコードをプログラムに直接入れるだけで、同じバイトコードを得ることができます。 – BrenBarn
真実ですが、彼はまた 'compiler'モジュールについて言及します。これは' compile'よりも洗練されたコードオブジェクトを構築するために使用できます。もちろん、Pythonバイトコードを手で書くのが好きなら、より簡単な方法は 'types.CodeType'オブジェクトを直接作成することです。 PythonのVMは非常にきれいなスタック指向の獣です。 – Perkins