Итераторы Python
Итераторы Python
Итераторы — это объекты, которые можно повторять. В этом руководстве вы узнаете, как работает итератор и как создать собственный итератор с помощью методов __iter__ и __next__.
Видео:Итераторы Python
Итераторы в Python
Итераторы повсюду в Python. Они элегантно реализованы в 05
. петли, включения, генераторы и т. д., но скрыты от глаз.
Итератор в Python — это просто объект, который можно повторять. Объект, который будет возвращать данные по одному элементу за раз.
С технической точки зрения, объект итератора в Python должен реализовать два специальных метода, 19
и 22
, которые в совокупности называются протоколом итератора. .
Объект называется итерируемым если мы сможем получить от него итератор. Большинство встроенных в Python контейнеров, таких как список, кортеж, строка и т. д., являются итерируемыми.
34
функция (которая, в свою очередь, вызывает функцию 41
метод) возвращает из них итератор.
Итерация через итератор
Мы используем 54
функция для ручного перебора всех элементов итератора. Когда мы достигнем конца и больше не будет возвращаемых данных, он поднимет 61
Исключение. Ниже приведен пример.
06
Вывод
15пре>
Более элегантный способ автоматической итерации — использование цикла for. Используя это, мы можем перебирать любой объект, который может возвращать итератор, например список, строку, файл и т. д.
23<час>Работа цикла for для итераторов
Как мы видим в приведенном выше примере,
72
цикл смог автоматически перебирать список.На самом деле
87
loop может выполнять итерацию по любому итерируемому объекту. Давайте подробнее рассмотрим, как95
Цикл на самом деле реализован в Python.37На самом деле реализовано как.
45Итак, внутри
104
цикл создает объект итератора,113
по телефону127
на итерируемом объекте.Как ни странно, этот
136
Цикл на самом деле является бесконечным циклом while.Внутри цикла вызывается
<час>141
для получения следующего элемента и выполнения тела155
цикл с этим значением. После того, как все элементы будут исчерпаны,160
поднимается, который удерживается внутри, и петля заканчивается. Обратите внимание, что любое другое исключение будет пропущено.Создание пользовательских итераторов
В Python легко создать итератор с нуля. Нам просто нужно реализовать
171
и180
методы.
192
Метод возвращает сам объект итератора. При необходимости можно выполнить некоторую инициализацию.
203
метод должен возвращать следующий элемент в последовательности. При достижении конца и при последующих вызовах он должен поднять216
.Здесь мы показываем пример, который даст нам следующую степень числа 2 на каждой итерации. Показатель степени начинается с нуля до заданного пользователем числа.
Если вы ничего не знаете об объектно-ориентированном программировании, посетите Python Object-Oriented Programming.
53Вывод
66Мы также можем использовать
220
loop для перебора нашего класса итератора.78<час>Бесконечные итераторы Python
Нет необходимости, чтобы элемент в объекте итератора был исчерпан. Могут быть бесконечные итераторы (которые никогда не заканчиваются). Мы должны быть осторожны при работе с такими итераторами.
Вот простой пример, демонстрирующий бесконечные итераторы.
Встроенная функция
230
может быть вызвана с двумя аргументами, где первый аргумент должен быть вызываемым объектом (функцией), а второй — часовым. Итератор вызывает эту функцию до тех пор, пока возвращаемое значение не будет равно часовому.85Мы видим, что
242
функция всегда возвращает 0. Поэтому передавайте ее как254
вернет итератор, который вызывает263
пока возвращаемое значение не станет равным 1. Этого никогда не происходит, и мы получаем бесконечный итератор.Мы также можем создавать собственные бесконечные итераторы. Следующий итератор теоретически вернет все нечетные числа.
95Пример запуска будет следующим.
102И так далее...
Будьте осторожны, чтобы включить условие завершения при переборе этих типов бесконечных итераторов.
Преимущество использования итераторов в том, что они экономят ресурсы. Как показано выше, мы могли бы получить все нечетные числа, не сохраняя в памяти всю систему счисления. У нас может быть бесконечное количество элементов (теоретически) в конечной памяти.
В Python есть более простой способ создания итераторов. Чтобы узнать больше, посетите:Генераторы Python с использованием yield.
Python