Pythonダイナミックタイプの解釈言語として、走行速度はCなどの静的タイプのコンピレーション言語よりも遅くなる可能性があります。しかし、特定の手法と戦略により、Pythonコードのパフォーマンスを大幅に改善できます。この記事では、Pythonコードを最適化してより速く効率的に実行し、Pythonのモジュールを使用して時間を実行するためにコードを正確に測定する方法について説明します。 timeit
デフォルトでは、モジュールはコードを100万回繰り返し、測定結果の精度と安定性を確保します。
の例コード(timeit
測定を使用
timeit
print_hi
<code class="language-python">import timeit def print_hi(name): print(f'Hi, {name}') if __name__ == '__main__': t = timeit.Timer(setup='from __main__ import print_hi', stmt='print_hi("leapcell")') print(t.timeit())</code>
I/O -DENSE操作とは、I/O操作の完了にほとんどの手順を費やしたプログラムまたはタスクを指します。 I/O操作には、ディスクからのデータ、ディスク、ネットワーク通信などの読み取りが含まれます。これらの操作には通常、ハードウェア機器が含まれるため、その実行速度はハードウェアの性能とI/O帯域幅に限定されます。 time
time.perf_counter()
特性は次のとおりです
<code class="language-python">import time start_time = time.perf_counter() # ...你的代码逻辑... end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间: {run_time} 秒")</code>
プログラムがI/O操作を実行する場合、データが外部デバイスからメモリまたはメモリから外部デバイスへの送信にデータを送信するためのデータを待機する必要があります。ブロッキング。
CPU使用率:
I/O操作の待ち時間により、CPUはこの期間中に自由状態にある可能性があり、CPU使用率が低くなります。パフォーマンスボトルネック:
i/o操作速度は、特にデータボリュームが大きいか、伝送速度が遅い場合、プログラムパフォーマンスのボトルネックになることがよくあります。
を使用してprint
およびその他の非同期プログラミングモデルを使用して、I/O操作が完了するのを待っている間にプログラムが他のタスクを実行し続け、CPU使用率を高めることができます。
<code class="language-python">import time import timeit def print_hi(name): print(f'Hi, {name}') return if __name__ == '__main__': start_time = time.perf_counter() t = timeit.Timer(setup='from __main__ import print_hi', stmt='print_hi("leapcell")') t.timeit() end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间: {run_time} 秒")</code>
print
並列処理:print_hi('xxxx')
データ全体の速度処理速度を改善するために、並行して複数のI/O操作を実行します。
<code class="language-python">def print_hi(name): return</code>
適切なデータ構造を選択して、データの読み取り時間と書き込み時間を減らします。
2。ジェネレーターを使用してリストと辞書を生成Python 2.7およびその後のバージョンでは、リスト、辞書、およびコレクタージェネレーターが改善され、データ構造の構築プロセスが簡潔で効率的になりました。
2。ジェネレーターの最適化を使用してください:
<code class="language-python">import time start_time = time.perf_counter() # ...你的代码逻辑... end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间: {run_time} 秒")</code>
3つ、文字列の縫いを避け、
join()
を使用します
メソッドは、特に多数の文字列を扱う場合は、
join()
たとえば:
%
:
4。サイクルの代わりに
<code class="language-python">import time import timeit def print_hi(name): print(f'Hi, {name}') return if __name__ == '__main__': start_time = time.perf_counter() t = timeit.Timer(setup='from __main__ import print_hi', stmt='print_hi("leapcell")') t.timeit() end_time = time.perf_counter() run_time = end_time - start_time print(f"程序运行时间: {run_time} 秒")</code>
join()
<code class="language-python">def print_hi(name): return</code>
従来のサイクル方法:map()
map()
関数を使用:for
5。適切なデータ構造を選択適切なデータ構造を選択することは、Pythonコードの実行効率を改善するために不可欠です。辞書の検索効率はリストよりも高く(特に大量のデータ量で)、小さなデータの量が逆の場合。 頻繁に多くの要素を削除した場合は、
の使用を検討してください。 頻繁に検索するときは、<code class="language-python">def fun1(): list_ = [] for i in range(100): list_.append(i)</code>
6。不必要な関数呼び出しを避けてくださいmap()
<code class="language-python">def fun1(): list_ = [i for i in range(100)]</code>
7つ、不必要な紹介を避けてください
不要なモジュールのインポートを削減し、費用を削減します。
collections.deque
8。グローバル変数の使用を避けてくださいbisect
関数内にコードを配置します。これは通常、速度を上げる可能性があります。 9つ、モジュールと関数属性アクセスを避けます
を使用して、属性アクセスの費用を回避します。
10個、内なるサイクルの計算を減らします
ループで事前に計算できる値を計算して、重複計算を削減します。
(Pythonコードのパフォーマンスの最適化とは何の関係もないため、Leapcellプラットフォームの紹介が省略されています)
上記の最適化方法は常に適用できるとは限らず、特定の状況に従って適切な最適化戦略を選択する必要があることに注意してください。 パフォーマンスとテストコードは、最も効果的な最適化ソリューションを見つけることができます。
以上があなたが知っておくべきPythonパフォーマンスのヒントの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。