ホームページ >バックエンド開発 >Python チュートリアル >関数内での Python コードの方が速いのはなぜですか?

関数内での Python コードの方が速いのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-12 22:01:01634ブラウズ

Why is Python Code Faster Inside Functions?

関数内の 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。