ジェネレータと反復器の関係と違い(個人的な理解)

844 ワード

ジェネレータの本質は反復器であり、特殊な反復器であり、動的に(1回の計算を繰り返して)データを提供することができる.コンテナストレージの完全な結果を作成する必要がなく、メモリ領域を節約することができます.データ量が大きいほど、メリットが明らかになります.コラボレーションはジェネレータ関数のyieldメソッドを利用して,ファイルの上下フレームを記録し,次回の呼び出しを容易にする.
ジェネレータは遅延操作であり,ループは1回計算して1回返す.yieldで値を返します.
反復器:next()関数によって次の値を返すオブジェクトを呼び出すことができます.
pythonのリスト、文字列、辞書は反復可能なオブジェクトに属しますが、反復器ではありません.iter()メソッドを呼び出すと反復器に変換され、next()メソッドによって呼び出されます.
反復可能オブジェクト:有_iter__()メソッドのオブジェクト.
forサイクル原理
  • まずオブジェクトが反復可能オブジェクトであるか否かを判断し、そうでなければ直接エラーを報告し、TypeError異常を投げ出し、そうであればiterメソッドを呼び出し、反復器
  • を返す.
  • 反復器のnextメソッドを絶えず呼び出し、反復器の値
  • を順番に返す.
  • は最後まで反復して、更に多くの要素がなくて、異常StopIterationを投げ出して、この異常pythonは自分で処理することができて、開発者
  • に暴露しません
  • # for    
    x=[1,2,3]
    x_iterator=x.__iter__()
    try:
        while True:
            print(x_iterator.__next__())
    except StopIteration:
        pass