参考ブログ:エゴン
目次
1. イテレータの紹介
反復子は、値を反復するために使用されるツールであり、反復はフィードバック プロセスを繰り返す活動であり、その目的は通常、目的の目標または結果に近づくことです。プロセスの各反復は「選択」と呼ばれます。選択は次の選択の初期値として使用され、単純な繰り返しは選択ではありません
1.1 反復可能なオブジェクト
インデックスを作成することで値を選択して置き換えるのは簡単ですが、これは文字列、リスト、およびタプルのシーケンス タイプにのみ適用されます。インデックスのない辞書やコレクションなどの非シリアル型の場合、セレクターを使用する、インデックスに依存せずに値を選択する方法を見つける必要があります。イテレータとは何かを理解したい場合は、非常に重要な概念であるオプションの生成オブジェクト (Iterable) を事前に理解する必要があります。文法形式に関しては、組み込みの _iter_ メソッドを持つオブジェクトはオプションの生成オブジェクトであり、文字列、リスト、タプル、辞書、コレクション、および開かれたファイルはすべてオプションの生成オブジェクトです。
{'name':'egon'}.__iter__
{7,8,9}.__iter__
……
1.2 イテレータオブジェクト
obj.iter()メソッドを呼び出して返される結果は Iterator オブジェクトです。セレクターオブジェクトは iter と next メソッドが組み込まれたオブジェクトです.開いたファイル自体がイテレーターオブジェクトです. selector object.iter() メソッドを実行してセレクター本体を取得し、selector.next() メソッドを実行すると計算されます.セレクターの次の値。
セレクターは、Python が提供するインデックスに依存しない統一された反復値メソッドであり、複数の「値」があれば、シーケンス型、非シーケンス型に関係なく、セレクターに従って値を取得できます。
>>> s={1,2,3} # 可迭代对象s
>>> i=iter(s) # 本质就是在调用s.__iter__(),返回s的迭代器对象i,
>>> next(i) # 本质就是在调用i.__next__()
1
>>> next(i)
2
>>> next(i)
3
>>> next(i) #抛出StopIteration的异常,代表无值可取,迭代结束
第二に、for ループの原理
1. 基本原則
イテレータの目的は、インデックスを作成できないオブジェクトに均一な値を持たせることです!
イテレータを使えば、インデックスに依存せずに値を選択できます. while ループを使った実装方法は次のとおりです.
goods=['mac','lenovo','acer','dell','sony']
i=iter(goods) #每次都需要重新获取一个迭代器对象
while True:
try:
print(next(i))
except StopIteration: #捕捉异常终止循环
break
for ループは反復ループとも呼ばれます. In の後には任意の生成オブジェクトを続けることができます. 上記の while ループは次のように省略できます.
goods=['mac','lenovo','acer','dell','sony']
for item in goods:
print(item)
forループが動作すると、まずオプション生成オブジェクトgoodsに組み込まれているiterメソッドを呼び出してselectorオブジェクトを取得し、iteratorオブジェクトのnextメソッドを呼び出して取得した値をitemに代入し、ループ本体を1回実行します。このサイクルは、Stoplteration 例外がキャッチされて反復が終了するまで繰り返されます。
2.細部に注意を払う
for ループの in は反復可能なオブジェクトに作用し、反復可能なオブジェクトを 2 回変換し、最後にそれをアイテムに割り当てます (最初に iter を呼び出し、次に next を呼び出して値を割り当てます)。
できる
1 つのことを理解する必要があります: c は反復子オブジェクトですが、in の後で iter メソッドが呼び出されますが、最後に c は反復子オブジェクトであるため、影響を受けません!
3. イテレータの長所と短所
インデックスの選択値に基づいて、選択のすべてのステータスがインデックスに保存され(すべてのデータが最初にメモリにロードされます)、セレクターに基づく選択方法はインデックスを必要としなくなり、すべて状態はセレクターに保存されます(データを 1 つずつロードし、一度に次のデータを 1 つだけロードします) が、この処理方法には長所と短所の両方があります。
3.1 利点
1.シーケンス型と非シーケンス型の値を選択する統一された方法を提供します。
2. 感情的な計算: セレクター オブジェクトはデータ ストリームを表し、必要な場合にのみ値を計算するために next を呼び出すことができます. セレクター自体に関する限り、同時にメモリには 1 つの値しかないため、無制限のデータストリームは格納できますが、リストなどの他のコンテナ タイプの場合、すべての要素をメモリに格納する必要があり、メモリのサイズによって制限され、格納できる値の数が制限されます。
3.2 短所
1. 使い切らないとイテレータの長さが取れない
2.削除できる値は 1 つだけであり、最初に戻すことはできません. これは 1 回限りのようなものです. セレクターが生成された後の唯一の目標は、値が使い果たされるまで次のメソッドを繰り返し実行することです. Call next; 同じオブジェクトを再度選択したい場合は、 iter メソッドを再度呼び出して新しいセレクタ オブジェクトを作成することしかできません. 同じオブジェクトを使用するサイクルが 2 つ以上ある場合セレクター、値を取得できるサイクルは 1 つだけである必要があります