ホームページ > バックエンド開発 > Python チュートリアル > コードを関数にカプセル化すると、Python のパフォーマンスが向上するのはなぜですか?

コードを関数にカプセル化すると、Python のパフォーマンスが向上するのはなぜですか?

Patricia Arquette
リリース: 2024-11-11 02:21:02
オリジナル
931 人が閲覧しました

Why Does Encapsulating Code in Functions Increase Python Performance?

関数を使用した Python コードのパフォーマンスの最適化

Python の関数内で特定のコードを実行すると、実行速度が大幅に向上することが確認されています。この奇妙な動作の背後にある理由を調べてみましょう。

当初、for ループは関数内にカプセル化されていました。

def main():
    for i in xrange(10**8):
        pass
main()
ログイン後にコピー

このコードは、2 秒未満で完了する、賞賛に値するパフォーマンスを示します。ただし、for ループが関数内に囲まれずに独立して実行された場合:

for i in xrange(10**8):
    pass
ログイン後にコピー

その実行時間は 4 秒以上に急増しました。この相違の背後にある謎を解明するには、Python インタプリタによって生成されたバイトコードを詳しく調べる必要があります。

関数のバイトコードを調べると、変数 i が STORE_FAST オペコードを使用して割り当てられていることがわかります。

LOAD_FAST               0 (i)
ログイン後にコピー

for ループがトップレベルで実行されると、変数 i は STORE_NAME オペコードを使用して割り当てられます。

STORE_NAME               1 (i)
ログイン後にコピー

重要なことに、STORE_FAST は STORE_NAME よりも効率的な操作であることが確認されています。 。この効率は、i が関数内のローカル変数である場合 (STORE_FAST を使用)、スタック フレームに格納されるという事実から生じます。対照的に、i がグローバル変数である場合 (STORE_NAME を使用)、グローバル変数のディクショナリに保存する必要があります。

バイトコードをさらに検査するには、dis モジュールを利用できます。関数を直接逆アセンブリするには、dis モジュールを使用できます。ただし、トップレベルで実行されるコードを逆アセンブリするには、コンパイル組み込みを利用する必要があります。

基礎となるバイトコード操作を理解することで、Python の関数の力を利用して、コードの実行速度を効果的に最適化できます。

以上がコードを関数にカプセル化すると、Python のパフォーマンスが向上するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート