ホームページ  >  記事  >  バックエンド開発  >  Python のパフォーマンスを向上させるためのいくつかの方法

Python のパフォーマンスを向上させるためのいくつかの方法

WBOY
WBOYオリジナル
2016-08-04 08:55:451533ブラウズ

Pythonのパフォーマンスを向上させるためのいくつかのソリューション。

1. 関数呼び出しの最適化 (スペーススパン、メモリアクセスの回避)

プログラム最適化の核心は、コード実行時間の範囲やメモリ空間の範囲など、操作の範囲を最小限に抑えることです。

1. ビッグデータの合計、sum を使用します

リーリー

2. 小さなデータを合計し、sum の使用を避ける

リーリー

結論: ビッグデータの合計は非常に効率的であり、小さなデータの合計は直接蓄積の効率が高いです。

2. 要素を取得するための For ループの最適化 (メモリアクセスを避けるためにスタックまたはレジスタを使用)

リーリー

インデックスの使用は可能な限り避けるべきです。

リーリー

各要素に値を直接割り当てるのと同じです。

リーリー

3. ジェネレーターの最適化 (操作の代わりにルックアップテーブル)

リーリー
リーリー
リーリー

4. 電力演算の最適化 (pow (x, y, z))

リーリー

結論: pow(x,y,z) は x**y%z よりも優れています。

5. 除算演算の最適化

リーリー

結論: divmod は // や % よりも優れています。

6. 最適化アルゴリズムの時間計算量

アルゴリズムの時間計算量は、プログラムの実行効率に最も大きな影響を与えます。Python では、リスト内の特定の要素を検索する時間計算量などを最適化するために、適切なデータ構造を選択できます。 set はそれぞれ O(n) と O(.1) です。シナリオが異なれば、最適化方法も異なります。一般的に、分割統治、分岐結合、貪欲動的プログラミングなどの考え方があります。

7. コピーとディープコピーの合理的な使用

dict や list などのデータ構造のオブジェクトの場合、直接代入は参照を使用します。場合によっては、オブジェクト全体をコピーする必要があります。この場合、コピー パッケージで copy と deepcopy を使用できます。これらの 2 つの関数の違いは、deepcopy が再帰的にコピーすることです。効率が違います:

リーリー

timeit の後の -n は実行数を示します。最後の 2 行は 2 つの timeit の出力に対応します。以下も同様です。後者の方が一桁遅いことがわかります。

コピーに関する例:

リーリー

何が起こるかというと、 [[]] は空のリストを含む 1 要素のリストなので、 [[]] * 3 の 3 つの要素はすべてこの空のリスト (ポイント) です。リストの要素を変更すると、リストが変更されます。改質効率が高い。

8. dict または set を使用して要素を検索します

Python の辞書とセットは、ハッシュ テーブル (C++ 標準ライブラリ unowned_map と同様) を使用して実装され、要素を見つける時間計算量は O(1) です。

リーリー

結論: set のメモリ使用量が最も小さく、dict の実行時間が最も短いです。

9. 合理的な使用 (ジェネレーター) と収量 (メモリの節約)

リーリー

結論: ジェネレーターを使用して横断してみてください。

上記は Python のパフォーマンスを向上させるためのいくつかのソリューションです。今後も追加していきますので、必要に応じてご覧ください。

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