Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ イテレータプロトコル | Python Iterators
Pythonにおける関数型プログラミングの概念

bookイテレータプロトコル

メニューを表示するにはスワイプしてください

Pythonにおけるイテレータプロトコルは、オブジェクトを反復処理可能にするための一連のメソッドであり、forループなどの構文と互換性を持たせます。関与する2つの主要なメソッドは__iter____next__です。オブジェクトに対してforループを使用すると、Pythonは内部的にそのオブジェクトの__iter__メソッドを呼び出してイテレータを取得します。このイテレータは__next__メソッドを持っている必要があり、呼び出されるたびにシーケンス内の次の要素を返します。要素がなくなった場合、__next__はシーケンスの終了を示すためにStopIteration例外を発生させなければなりません。

1234567891011121314151617181920212223242526
class SquaresIterator: # Initialize with the number of squares to generate def __init__(self, limit): self.limit = limit self.current = 0 # Return the iterator object (itself) def __iter__(self): return self # Return the next square, or stop if done def __next__(self): if self.current < self.limit: # Calculate square result = self.current ** 2 # Move to next number self.current += 1 return result # If no more items else: raise StopIteration for square in SquaresIterator(5): print(square)
copy

__init__ - セットアップフェーズ

イテレータが作成されると、次の値を受け取ります:

  • limit → 生成する数値の個数;

  • current = 0を設定 → 開始位置;

  • 反復処理に必要な準備を行います。

__iter__ - イテラブルにするためのメソッド

  • self(オブジェクト自身)を返す;
  • これにより、forループで使用可能になる。

__next__ - 値の生成

このメソッドは、ループが次の要素を要求するたびに実行される:

  • current < limit の場合:
    • current² を計算;
    • current を1増やす;
    • 結果を返す。
  • currentlimit の場合:
    • ループを自動的に停止するために StopIteration を発生させる。
question mark

Pythonでオブジェクトがイテラブルと見なされるために必要な条件はどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 5.  3

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 5.  3
some-alt