関数内で実行すると Python コードが高速になるのはなぜですか?
関数内で Python コードがより迅速に実行されるのはなぜですか?
ループを 1 億回実行する以下の Python コード スニペットを考えてみましょう。
def main(): for i in range(10**8): pass main()
Linux で time 関数を使用して測定すると、このコードは驚くほど高速に実行されます。
real 0m1.841s user 0m1.828s sys 0m0.012s
興味深いことに、for ループが関数内に囲まれずに実行されると次のようになります。
for i in range(10**8): pass
実行時間が大幅に増加します:
real 0m4.543s user 0m4.524s sys 0m0.012s
この不一致はなぜ発生しますか?
関数の内部
コードが関数内にある場合、バイトコードは次のことを明らかにします:
2 0 SETUP_LOOP 20 (to 23) 3 LOAD_GLOBAL 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_FAST 0 (i) 3 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 0 (None) 26 RETURN_VALUE
関数の外
対照的に、コードがトップレベルで実行される場合、バイトコードは次のとおりです。
1 0 SETUP_LOOP 20 (to 23) 3 LOAD_NAME 0 (xrange) 6 LOAD_CONST 3 (100000000) 9 CALL_FUNCTION 1 12 GET_ITER >> 13 FOR_ITER 6 (to 22) 16 STORE_NAME 1 (i) 2 19 JUMP_ABSOLUTE 13 >> 22 POP_BLOCK >> 23 LOAD_CONST 2 (None) 26 RETURN_VALUE
問題の核心
違いは、STORE_FAST と STORE_NAME の使用にあります。 STORE_FAST は、変数 (この場合、i) がローカル変数 (関数内) である場合に使用され、STORE_NAME は変数がグローバル変数 (関数外) である場合に使用されます。前者の方が大幅に効率的です。
これは、変数がローカルとして宣言されると、インタープリターがその変数に特定のメモリ位置を使用するようにコードを最適化できるという事実によって説明できます。ただし、変数がグローバルとして宣言されている場合、インタープリターは変数を見つけるためにグローバル スコープ全体を検索する必要があり、より時間のかかるプロセスになります。
以上が関数内で実行すると Python コードが高速になるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

Investing.comの反クラウリング戦略を理解する多くの人々は、Investing.com(https://cn.investing.com/news/latest-news)からのニュースデータをクロールしようとします。
