ホームページ >バックエンド開発 >Python チュートリアル >【Python】forループはどうやって動くの?
反復レベルで理解すると、for の仕組みについてより深く理解できるかもしれません。
まず、dir を使用して、2 つの異なるタイプの range と str に共通するものを見てみましょう。
>>> dir(range) ['__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count', 'index', 'start', 'step', 'stop'] >>> dir(str) ['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] 查看这两个的共有属性 >>> set(dir(range)) & set(dir(str)) {'__hash__', '__eq__', '__contains__', '__iter__', '__getitem__', 'count', '__lt__', '__dir__', '__le__', '__subclasshook__', '__ge__', '__sizeof__', '__format__', '__len__', '__ne__', '__getattribute__', '__delattr__', '__reduce_ex__', '__gt__', '__reduce__', '__setattr__', '__doc__', '__class__', '__new__', '__repr__', '__init__', 'index', '__str__'}
私たちは __iter__ 属性に焦点を当てます。どちらにもこの機能があります。for ループを使用して反復できる他のオブジェクトを見ると、この特別なメソッドを見つけることができます。
このメソッドを実装するオブジェクトは iterable と呼ばれます。
オブジェクトを Python の組み込み iter() メソッドに渡します。これにより、for ループはこのパターンを使用して、すべてのオブジェクトに適用できるパターンを実装します。
例:
>>> iter([1, 2]) <list_iterator object at 0x000001A1141E0668> >>> iter(range(0, 10)) <range_iterator object at 0x000001A1124C6BB0> >>> iter("abc") <str_iterator object at 0x000001A1141E0CF8> >>> iter函数返回的对象我们称之为iterator,iterator只需要做一件事,那就是调用next(iterator)方法,返回下一个元素。
例:
>>> t = iter("abc") >>> next(t) 'a' >>> next(t) 'b' >>> next(t) 'c' >>> next(t) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration
イテレーターに反復する要素がなくなると、例外がスローされます。
それでは、ここで itrable と iterator の定義を示します。
iterable:
は iter に渡して反復オブジェクトを返すことができます。
iterator:
は次の関数に渡して、次の反復要素のオブジェクトを返し、反復の最後に例外をスローできます。
それで、あなたが言及した例では、イテレータを使用して再定義します。
rreee読んで何かを得られれば幸いです。
[Python] for ループの仕組みに関するその他の記事については、PHP 中国語 Web サイトに注目してください。