検索

Python は動的に型付けされ、解釈される言語です。多くの開発者にとって、Python の実行速度が遅いことはよく知られています。すべてがオブジェクトであるという特性が、実行速度が遅い理由の 1 つです。次の記事で説明しています。 Python が遅い理由をいくつか説明します。お役に立てれば幸いです。

なぜPythonは遅いのでしょうか?

#Python は静的言語ではなく動的言語です

つまり、Python プログラムが実行されると、コンパイルされます。コンパイラーは変数の型を認識しません。 C では、コンパイラは変数が定義されたときに変数の型を認識しますが、Python ではそれがオブジェクトであることは実行されたときにのみ認識されます。

したがって、C で次のように記述するとします。

/ * C代码* /
int  a  =  1 ;
int  b  =  2 ;
int  c  =  a  +  b ;

C コンパイラは、a と b が整数であることを最初から知っています。単に、それらが他の整数であることはあり得ません。この知識があれば、2 つの整数を加算し、メモリ内の単純な値である別の整数を返すルーチンを呼び出すことができます。

C で実行される処理は大まかに次のとおりです:

1. 1 を a に代入;

2. 2 を b に代入;

3. バイナリ加算の呼び出し binary_add(a, b)(a, b);

4. 構造体を C 変数に代入

python有効なコードは次のとおりです。

# python code
a = 1
b = 2
c = a + b

ここで、インタプリタは 1 と 2 がオブジェクトであることだけを知っていますが、それらがどのようなタイプのオブジェクトであるかは知りません。したがって、インタプリタは各変数の PyObject_HEAD をチェックして型情報を見つけ、両方の型に適切な合計ルーチンを呼び出す必要があります。最後に、戻り値を保持するために新しい Python オブジェクトを作成して初期化する必要があります。


実行プロセスは大まかに次のとおりです:

1.

に 1 を代入 (1) a->PyObject_HEAD->typecode を a->PyObject_HEAD->typecode に設定しますinteger

(2) Seta->val = 1

2 を設定し、b

に 2 を代入します (1) b->PyObject_HEAD->typecode をinteger

(2) b->val = 2

3 を設定します。バイナリ加算を呼び出します binary_add(a, b)

(1) 型コード a- を見つけます>PyObject_HEAD

(2) a は整数、値は a->val

(3) 型コードを検索します b->PyObject_HEAD

( 4) b は整数、値は b ->val

(5) バイナリ加算を呼び出す binary_add(a->val, b->val)

(6)結果は result であり、整数です。

4. 新しいオブジェクトを作成します c

(1) c->PyObject_HEAD->typecode を整数に設定します

(2) c->val を割り当てます結果

動的型付けでは、どの操作にもより多くの手順が必要であることを意味します。これが、数値データ操作に関して Python が C よりも遅い主な理由です。

Python はコンパイル言語ではなくインタープリタ言語です

インタープリタ言語とコンパイル言語の違いは、プログラムの実行速度にも違いをもたらします. .インテリジェントなコンパイラーは、反復的で不必要な操作を予測して最適化できます。これにより、プログラムの実行速度も向上します。

Python のオブジェクト モデルは非効率的なメモリ アクセスをもたらします

上記の例では、C 言語と比較して、Python で整数を操作すると、型情報の層が追加されます。 。整数がたくさんあり、何らかのバッチ操作を実行したい場合、Pythonではリストがよく使用され、Cではバッファベースの配列が使用されます。最も単純な形式では、Numpy 配列は C の配列を中心に構築された Python オブジェクトです。つまり、Numpy は連続キャッシュ領域データの値を指すポインタを持ちますが、Python では Python リストにはその領域をキャッシュしたいだけのポインタがあり、各ポインタは Python キャッシュ オブジェクトを指し、各オブジェクトはデータ (この場合は整数) にバインドされます。

これら 2 つの状況の概略図:

なぜPythonは遅いのでしょうか?

上の図から明らかなように、データを操作するとき (並べ替え、計算、検索など)、 , など)、生存コストとアクセスコストの点で、Numpy は Python よりも効率的です。

以上がなぜPythonは遅いのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
Pythonアレイで実行できる一般的な操作は何ですか?Pythonアレイで実行できる一般的な操作は何ですか?Apr 26, 2025 am 12:22 AM

PythonArraysSupportVariousoperations:1)SlicingExtractsSubsets、2)Appending/ExtendingAdddesements、3)inSertingSelementSatspecificpositions、4)remvingingDeletesements、5)sorting/verversingsorder、and6)listenionsionsionsionsionscreatenewlistsebasedexistin

一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?一般的に使用されているnumpy配列はどのようなアプリケーションにありますか?Apr 26, 2025 am 12:13 AM

numpyarraysAressertialentionsionceivationsefirication-efficientnumericalcomputations andDatamanipulation.theyarecrucialindatascience、mashineelearning、物理学、エンジニアリング、および促進可能性への適用性、scaledatiencyを効率的に、forexample、infinancialanalyyy

Pythonのリスト上の配列を使用するのはいつですか?Pythonのリスト上の配列を使用するのはいつですか?Apr 26, 2025 am 12:12 AM

UseanArray.ArrayOverAlistinPythonは、Performance-criticalCode.1)homogeneousdata:araysavememorywithpedelements.2)Performance-criticalcode:Araysofterbetterbetterfornumerumerumericaleperations.3)interf

すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?すべてのリスト操作は配列でサポートされていますか?なぜまたはなぜですか?Apr 26, 2025 am 12:05 AM

いいえ、notallistoperationSaresuptedbyarrays、andviceversa.1)arraysdonotsupportdynamicoperationslikeappendorintorintorinsertizizing、whosimpactsporformance.2)リスト

Pythonリストの要素にどのようにアクセスしますか?Pythonリストの要素にどのようにアクセスしますか?Apr 26, 2025 am 12:03 AM

toaccesselementsinapythonlist、useindexing、negativeindexing、slicing、oriteration.1)indexingstartsat0.2)negativeindexingAcsesess.3)slicingextractStions.4)reterationSuseSuseSuseSuseSeSeS forLoopseCheckLentlentlentlentlentlentlenttodExeror。

Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Pythonを使用した科学コンピューティングでアレイはどのように使用されていますか?Apr 25, 2025 am 12:28 AM

Arraysinpython、特にvianumpy、arecrucialinscientificComputing fortheirefficienty andversitility.1)彼らは、fornumericaloperations、data analysis、andmachinelearning.2)numpy'simplementation incensuresfasteroperationsthanpasteroperations.3)arayableminablecickick

同じシステムで異なるPythonバージョンをどのように処理しますか?同じシステムで異なるPythonバージョンをどのように処理しますか?Apr 25, 2025 am 12:24 AM

Pyenv、Venv、およびAnacondaを使用して、さまざまなPythonバージョンを管理できます。 1)Pyenvを使用して、複数のPythonバージョンを管理します。Pyenvをインストールし、グローバルバージョンとローカルバージョンを設定します。 2)VENVを使用して仮想環境を作成して、プロジェクトの依存関係を分離します。 3)Anacondaを使用して、データサイエンスプロジェクトでPythonバージョンを管理します。 4)システムレベルのタスク用にシステムPythonを保持します。これらのツールと戦略を通じて、Pythonのさまざまなバージョンを効果的に管理して、プロジェクトのスムーズな実行を確保できます。

標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?標準のPythonアレイでnumpyアレイを使用することの利点は何ですか?Apr 25, 2025 am 12:21 AM

numpyarrayshaveveraladvantages-averstandardpythonarrays:1)thealmuchfasterduetocベースのインプレンテーション、2)アレモレメモリ効率、特にlargedatasets、および3)それらは、拡散化された、構造化された形成術科療法、

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 Mac版

SublimeText3 Mac版

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

DVWA

DVWA

Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター