ホームページ >バックエンド開発 >Python チュートリアル >関数内での Python コードの方が速いのはなぜですか?
関数内の Python コードの高速化: 最適化された実行の解明
Python コードを実行する場合、関数内で操作を囲むとパフォーマンスが大幅に向上することがよくあります。この顕著な違いは好奇心を刺激します:何 Python 代码在関数中执行更快?
速度格差の調査
次のコード スニペットを考えてみましょう:
def main(): for i in xrange(10**8): pass main()
このコードの実行には約 1.8 秒かかります。ただし、for ループが関数の外で実行される場合:
for i in xrange(10**8): pass
実行には 4.5 秒ほど長くかかります。
バイトコード分析: 根本的な理由を明らかにする
このパフォーマンスの不一致を理解するために、Python によって生成されたバイトコードを詳しく調べます。関数内のバイトコードは、ループを設定し、範囲を計算し、それを反復処理する一連の操作を示します。この構造は速度を考慮して最適化されています。
トップレベルでは、バイトコードがわずかに異なります。変数 i はグローバルとして宣言されているため、ストア操作 (STORE_NAME) は関数内で使用されるローカル ストア操作 (STORE_FAST) よりも遅くなります。
バイトコードを調べるために、dis モジュールが貴重な支援を提供します。次のコマンドは、関数とトップレベル コードをそれぞれ逆アセンブルします。
import dis dis.dis(main) dis.dis(compile('for i in xrange(10**8): pass', '', 'exec'))
結論
Python の関数内でコードを実行することによるパフォーマンスの利点は、Python の最適化に由来します。バイトコードの実行。 STORE_FAST 命令で表されるローカル変数を使用すると、低速な STORE_NAME 命令を使用するグローバル変数を使用する場合に比べて、実行速度が大幅に向上します。
以上が関数内での Python コードの方が速いのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。