Python のイテレータ プロトコルはどのように定義されていますか?
Python では、イテレータ (Iterator) は、イテレータ プロトコル (Iterator Protocol) を実装するオブジェクトです。イテレータ プロトコルは、イテレータ オブジェクトの動作を定義する標準仕様です。イテレータ プロトコルを実装するオブジェクトは、iter()
関数と next()
関数を使用して要素に 1 つずつアクセスできます。
イテレータ プロトコルには 2 つのメソッドが含まれています。
__iter__()
: イテレータ オブジェクト自体を返します。このメソッドにより、反復子オブジェクトを for
ループ内で使用できるようになります。 __next__()
: イテレータの次の要素を返します。次の要素がない場合は、StopIteration
例外がスローされます。 具体的なコード例を通じてイテレータ プロトコルの実装を理解しましょう。
class MyIterator: def __init__(self, data): self.data = data self.index = 0 def __iter__(self): return self def __next__(self): if self.index >= len(self.data): raise StopIteration value = self.data[self.index] self.index += 1 return value # 创建一个可迭代对象 my_list = [1, 2, 3, 4, 5] my_iterator = MyIterator(my_list) # 使用for循环迭代 for item in my_iterator: print(item) # 手动迭代 while True: try: item = next(my_iterator) print(item) except StopIteration: break
上の例では、カスタム反復子クラス MyIterator
を実装しました。入力データとしてリストを受け取り、__next__()
メソッドが呼び出されるたびにリスト内の次の要素を返します。リストの最後まで反復すると、反復の終了を通知するために StopIteration
例外がスローされます。
MyIterator
オブジェクトを使用する場合、for
ループを通じて要素を反復処理するか、next()
関数を使用して次のことを行うことができます。スローされるまで手動で繰り返します。 StopIteration
例外が発生しました。
イテレータ プロトコルを実装するオブジェクトのみを反復できることに注意してください。オブジェクトが __iter__()
メソッドを実装し、反復子オブジェクトを返す場合、そのオブジェクトは反復可能です。 iter()
関数を使用して、この反復可能オブジェクトのイテレータを取得できます。上記のコード例では、MyIterator
クラスに __iter__()
メソッドを実装し、self
オブジェクトを返し、MyIterator
The を作成しました。オブジェクト自体は反復可能なオブジェクトになります。
つまり、反復子プロトコルは反復子オブジェクトの動作を定義する仕様です。 Python では、要素に 1 つずつアクセスする __iter__()
メソッドと __next__()
メソッドを実装することでイテレータ オブジェクトを実装できます。この反復子プロトコルの実装により、便利で効率的かつ柔軟な反復操作方法が提供されます。
以上がPython ではイテレータ プロトコルはどのように定義されますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。