ホームページ  >  記事  >  バックエンド開発  >  Python のジェネレーターとイテレーターとの違いの分析

Python のジェネレーターとイテレーターとの違いの分析

WBOY
WBOYオリジナル
2016-07-21 14:53:141098ブラウズ

ジェネレーター
ジェネレーターはイテレーターであり、yield 操作を使用して関数をイテレーターに構築する特別な関数です。通常の関数にはエントリと戻り値があり、関数が呼び出されると、エントリから実行が開始され、最後に対応する戻り値が返されます。ジェネレーターによって定義された関数には複数のエントリと複数の戻り値があり、ジェネレーターで next() 操作を実行し、ジェネレーターに入ってコードの実行を開始し、yield 操作で呼び出し元に値を返し、関数を一時停止します。開始すると、関数の実行環境とパラメータが保存されます。ジェネレータで別の next() 操作が実行されると、パラメータが一時停止状態から呼び戻され、最後に一時停止された実行環境に入り、次の操作が継続されるまで続きます。降伏操作中に上記のプロセスを繰り返します。 Python のループ操作は C 言語の実装とは異なります。List などのデータ構造を使用する場合は、大量のコンテンツが消費されます。ループ操作でジェネレーターを使用すると、メモリ内でオブジェクトをインスタンス化するだけで済むため、メモリの使用量を削減できます。ループ操作の実行速度が向上します。

リーリー

ジェネレータ式
for...[if]... ステートメントはリストを簡潔に構築でき、ジェネレーターの構築にも使用できます。

リーリー

イテレーターとジェネレーターの違い
Iterator はより抽象的な概念で、そのクラスに next メソッド (次の Python3) があり、iter メソッドがそれ自体を返す場合、任意のオブジェクトです。

すべてのジェネレーターはイテレーターですが、その逆はありません。通常、ジェネレーターは、1 つ以上の yield 式で構成される関数を呼び出すことによって生成されます。イテレータの定義も満たします。

ジェネレーターの特性に加えてクラスにいくつかのカスタム メソッドが必要な場合は、一般的に、ジェネレーターの方が便利で簡単です。

リーリー

ジェネレーター式と同等:

リーリー

リストは次のとおりです:

リーリー

カスタム反復子を構築している場合:

リーリー

この時点で、次のような独自のメソッドを定義することもできます:

リーリー

この 2 つの点は同じです。オブジェクトが反復された後は、反復を書き換えることはできません。

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