Python の for ループ についてよくわからない場合は、この記事を読むことをお勧めします。この記事では主に Python での for ループの仕組みについて説明します。誰にとっても有益であり、学習する価値があります。必要な方は以下をご覧ください。
はじめに
for...in は、Python プログラマーによって最もよく使用されるステートメントです。for ループは、コンテナー オブジェクト 内の要素を反復するために使用されます。これらのオブジェクトには、リスト、タプル、辞書などがあります。セット、ファイル、またはカスタム クラスや関数など。
>>> for elem in [1,2,3]:
... print(elem)
...
1
2
3
>>> for i in ("zhang", "san", 30):
... print(i)
...
zhang
san
30
>>> for c in "abc":
... print(c)
...
a
b
c
ファイルに対して動作
>>> for i in {"a","b","c"}: ... print(i) ... b a c
ステートメントでこれほど多くの異なるタイプのオブジェクトがサポートされている理由を尋ねる、for ステートメントでは他にどのような種類のオブジェクトを使用できますか?この質問に答える前に、まず for ループの背後にある実行原理を理解する必要があります。 for ループはコンテナを反復するプロセスです。反復とは何ですか?反復とは、コンテナー内の要素がなくなるまで、コンテナー オブジェクトから要素を 1 つずつ読み取ることです。では、どのオブジェクトが反復操作をサポートしているのでしょうか?どのようなオブジェクトでも使用できますか?まずクラスをカスタマイズしてみて、それが機能するかどうかを確認してください:
>>> for k in {"age":10, "name":"wang"}: ... print(k) ... age name
エラー スタック ログには、MyRange が反復可能なオブジェクトではないため、反復に使用できないことが非常に明確に示されています。つまり、どのような種類のオブジェクトが呼び出されるのか反復可能なオブジェクト (反復可能)? Iterable オブジェクトは iter メソッドを実装し、イテレータを返す必要があります。イテレータは next メソッドを実装するだけで済みます。ここで、リストが反復をサポートする理由を検証してみましょう:
>>> for line in open("requirement.txt"): ... print(line, end="") ... Fabric==1.12.0 Markdown==2.6.7
実験結果から、リストは iter メソッドを実装し、次のメソッドが実装されているため反復子オブジェクト (list_iterator) を返すため、反復可能オブジェクトです。次のメソッドが継続的に呼び出されていることがわかります。実際には、コンテナ内の要素がなくなり、StopIteration 例外がスローされるまで、コンテナ内の要素を繰り返し取得しています。
では、for ステートメントはどのようにループするのでしょうか?この時点で、ご想像のとおり、手順は次のとおりです。
イテレータの次のメソッドを継続的に呼び出し、そのたびにイテレータの値を順番に返します
最後まで繰り返し、要素がなくなったら例外
StopIteration が発生しますPython はこの例外を独自に処理します 処理は開発者に公開されません以前の MyRange はイテレータ プロトコルにこれら 2 つのメソッドを実装していないためエラーを報告しました。現在は改善を続けています:
>>> class MyRange: ... def init(self, num): ... self.num = num ... >>> for i in MyRange(10): ... print(i) ... Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'MyRange' object is not iterable
次のメソッドを実装しているため、MyRange 自体はすでにイテレータであるため、 iter とは返されるのはオブジェクトそのものです。次に、これを for ループで使用してみます。
>>> x = [1,2,3] >>> its = x.iter() # x有此方法,说明列表是可迭代对象 >>> its <list_iterator object at 0x100f32198> >>> its.next() # its有此方法,说明its是迭代器 1 >>> its.next() 2 >>> its.next() 3 >>> its.next() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIterationカスタム MyRange 関数が組み込み関数の range と非常によく似ていることに気づきましたか。 for ループの本質は、StopIteration 例外が発生するまで反復子の次のメソッドを呼び出し続けることであるため、任意の反復可能なオブジェクトを for ループで使用できます。
以上がPython での for ループの動作の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。