Iterator はより抽象的な概念です。クラスに next メソッドと iter メソッドがある場合、オブジェクトはそれ自体を返します。文字列、リスト、辞書、タプルなどのコンテナ オブジェクトの場合は、For を使用します。ループトラバーサルは非常に便利です。
バックグラウンドの for ステートメントは、コンテナ オブジェクトの iter() 関数を呼び出します。iter() は Python の組み込み関数です。 iter() は、コンテナ内の要素に 1 つずつアクセスする next() メソッドを定義するイテレータ オブジェクトを返します。next() は Python の組み込み関数でもあります。後続の要素がない場合、next() は StopIteration 例外をスローします。 (推奨される学習: Python ビデオ チュートリアル )
# 随便定义一个list listArray=[1,2,3] # 使用iter()函数 iterName=iter(listArray) print(iterName)
Generator (ジェネレーター) は、イテレーターを作成するためのシンプルで強力なツールです。これらは、データを返す必要がある場合に yield ステートメントを使用することを除いて、通常の関数と同じように作成されます。 next() が呼び出されるたびに、ジェネレーターは中断した位置を返します (ステートメントが最後に実行された位置とすべてのデータ値を記憶しています)
# 菲波那切数列 def Fib(max): n, a, b = 0, 0, 1 while n < max: yield b a, b = b, a + b n = n + 1 return '亲!没有数据了...' # 调用方法,生成出10个数来 f=Fib(10) # 使用一个循环捕获最后return 返回的值,保存在异常StopIteration的value中 while True: try: x=next(f) print("f:",x) except StopIteration as e: print("生成器最后的返回值是:",e.value) break
違い:
ジェネレーターはイテレーターが実行できるすべてのことを実行でき、iter() メソッドと next() メソッドが自動的に作成されるため、ジェネレーターは特に簡潔で、リストの代わりにジェネレーター式を使用するため効率的でもあります。同時に記憶も。プログラム状態を作成および保存するための自動メソッドに加えて、ジェネレーターが終了すると StopIteration 例外が自動的にスローされます。
Python 関連の技術記事の詳細については、Python チュートリアル 列にアクセスして学習してください。
以上がPythonイテレータとジェネレータの違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。