ホームページ  >  記事  >  バックエンド開発  >  Python プログラミング: 反復可能なオブジェクトとイテレーター (Iterable と Iterator)

Python プログラミング: 反復可能なオブジェクトとイテレーター (Iterable と Iterator)

王林
王林転載
2023-04-20 12:19:061288ブラウズ

はじめに

Python プログラミングではループ処理が避けられません。これには、反復可能オブジェクトと反復子 (Iterable & Iterator) という 2 つの重要な概念が関係します。この反復のトピックを理解して実際のプログラミングに適用できるように、2 ~ 3 回に分けて紹介します。この記事が最初です。

Python プログラミング: 反復可能なオブジェクトとイテレーター (Iterable と Iterator)

Iterable オブジェクト

Iterable オブジェクト (Iterable) は、一度に 1 つのメンバーを返すことができるオブジェクトを指します。反復可能なオブジェクトの例には、すべてのシーケンス型 (list、str、tuple など) と、dict、file オブジェクト、__iter__() メソッドまたは __getitem__ を実装する定義したクラスのオブジェクトなどの一部の非シーケンス型が含まれます。 () メソッドと反復プロトコルによって指定されたセマンティクス (詳細については、ここを参照してください:)。

反復可能なオブジェクトは、for ループやシーケンスが必要なその他の場所 (zip()、map()、filter() など) で使用できます。反復可能なオブジェクトがパラメータとして組み込み関数 iter() に渡されると、そのオブジェクトのイテレータが返されます。この反復子は、値のセットを 1 回だけ走査する場合にのみ適しています。反復可能オブジェクトを操作する場合、通常、 iter() を呼び出したり、反復子オブジェクトを自分で処理したりする必要はありません。これは、ループ中に反復子を保持するために使用される一時的な名前のない変数を作成する for ステートメントを使用して自動的に行われます。

つまり、反復可能オブジェクトとは、__iter__() メソッドまたは __getitem__() メソッドを実装するクラス オブジェクトです。

Iterator

Iterator (イテレーター) は、データ フローを表すオブジェクトを指します。イテレータの __next__() メソッドを繰り返し呼び出す (または組み込み関数 next() に渡す) と、ストリームに連続した項目が返されます。利用可能なデータがなくなると、StopIteration 例外が発生します。この時点で、イテレータ オブジェクトは使い果たされており、その __next__() メソッドをさらに呼び出すと、StopIteration が再度発生します。イテレータには、イテレータ オブジェクト自体を返す __iter__() メソッドが必要です。そのため、すべてのイテレータも反復可能であり、他の反復可能なオブジェクトを受け入れるほとんどの場所で使用できます。

つまり、イテレータは、2 つのイテレータ プロトコル メソッド __next__() と __iter__() を実装するデータ フロー オブジェクトです。

注目すべき例外は、複数回反復を試行するコードです (同じ反復子を複数回使用する)。コンテナ オブジェクト (リストなど) は、 iter() 関数に渡されるか、for ループで使用されるたびに、新しいイテレータを生成します。これをイテレータで試すと、前の反復中に使用された使い果たされたイテレータ オブジェクトが返されるだけで、空のコンテナのように見えます。したがって、コードを記述するときはこの状況を避けてください。

iter 関数

さらに、組み込み関数 iter() (舞台裏で __iter__() メソッドを呼び出す) が反復子オブジェクトを返すことを理解する必要があります。だから言えるのです。 iterable はイテレータを返すオブジェクトです。

イテレータと反復可能オブジェクトをさらに理解するために、説明とコード例を続けて、次の重要なポイントをさらに紹介します:

  • イテレータ プロトコルとループ
  • カスタム反復子を実装します。

以上がPython プログラミング: 反復可能なオブジェクトとイテレーター (Iterable と Iterator)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事は51cto.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。