Pythonのジェネレーターは、リストやタプルと同様の反復可能な一種ですが、内容をメモリに保存しません。代わりに、 yield
ステートメントを使用してフライで値を生成します。この怠zyな評価メカニズムにより、ジェネレーターは一度に一連のシーケンスを保存するためのメモリを消費しないため、メモリ効率を高めることができます。
発電機がどのようにメモリ効率を改善するかを理解するには、最初の100万のフィボナッチ数をたとえば、大量の数字を生成する必要がある例を考えてください。リストを使用する場合は、100万のすべての数値をメモリに保存する必要があります。ただし、ジェネレーターはこれらの数字を一度に1つずつ生成でき、現在および以前の値はいつでもメモリに保持します。これにより、特に大規模なデータセットまたは無限のシーケンスでは、メモリの使用量が大幅に削減されます。
ジェネレーターは、 yield
キーワードを使用する関数を定義することにより、イテレーターを作成するために使用できます。この関数が呼び出されると、それはイテレーターであるジェネレーターオブジェクトを返します。説明する簡単な例は次のとおりです。
<code class="python">def count_up_to(n): i = 0 while i </code>
この例では、 count_up_to
はジェネレーター関数です。 count_up_to(10)
で呼び出されると、 for
loopまたはnext()
のような他の反復方法を使用して繰り返すことができるジェネレーターオブジェクトを返します。関数内のyield
ステートメントは、関数の実行を一時停止し、 i
の現在の値を返します。
Pythonのジェネレーターと通常の機能の重要な違いは次のとおりです。
実行モデル:
return
ステートメントを使用して値を返します。yield
を使用して、値が要求されたときに一時停止し、実行を再開します。メモリの使用量:
国家管理:
yield
後に中断した場所から再開します。使用法:
ジェネレーターは、いくつかの実用的なシナリオで特に有益です。
これらのシナリオで発電機を活用することにより、開発者は、特に大量のデータやリソース制約の環境を扱う場合、より効率的でスケーラブルなコードを作成できます。
以上がPythonの発電機とは何ですか?メモリ効率をどのように改善しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。