0 знаков
44. Итераторы в Python
Кратко- Итераторы в Python - объекты, возвращающие один элемент за раз.
- Цикл
for
в Python работает с итераторами, перебирая значения итерируемого объекта.- Для получения итератора из объекта используется функция
iter()
.- Итераторы полезны для работы с файлами: они возвращают одну строку за раз, сохраняя ее в память, а не весь файл.
- В следующем уроке будут рассмотрены списковые включения и генераторы списков в Python.
В этом цикле уроков разберемся с итераторами в Python. На самом деле, в ходе предыдущих уроков по Python мы неоднократно встречались с итераторами. Самый простой пример использования итераторов – в цикле for
. С ним вы познакомились ранее.
Итератор – это объект, который возвращает за один раз, один свой элемент. Каждый вызов итератора возвращает следующий элемент коллекции. Если следующего элемента нет, то будет брошено исключение (про исключение в Python подробно говорили в уроке про обработку исключений).
Как мы говорили ранее, цикл for
может перебирать значения любого итерируемого объекта (список, строка и т.д.). Если выражаться более точно, для интерпретатора Python любой объект имеющий метод __iter__
, является итерируемым. Вернемся к циклу for
. При каждой итерации цикла происходит обращение к итератору, содержащемуся в обрабатываемом объекте. Если следующего элемента нет, то выбрасывается исключение StopIteration
(которое незаметно для пользователя) и цикл заканчивает работу.
Напишем простой пример:
l = [1, 2, 3, 4, 5]
for item in l:
print(item)
Теперь реализуем тот же код с явным использованием итераторов. Чтобы получить итератор из объекта, необходимо воспользоваться функцией iter()
:
it = iter(l)
print(type(it)) # => <class 'list_iterator'>
Теперь в переменной it
хранится итератор. Так же, как мы видим, итератор принадлежит типу list_iterator
. Чтобы получить следующее значение объекта, используем функцию next()
:
l = [1, 2, 3, 4, 5]
it = iter(l)
print(next(it)) # => 1
print(next(it)) # => 2
print(next(it)) # => 3
print(next(it)) # => 4
print(next(it)) # => 5
print(next(it)) # => StopIteration
Таким образом, мы реализовали ручной цикл for
на итераторах. Ради интереса, сделаем цикл for
на основе while
и итераторов:
l = [1, 2, 3, 4, 5]
it = iter(l)
next_element = True
while next_element:
try:
print(next(it))
except StopIteration:
next_element = False
Еще одна интересная особенность итераторов в Python: итератор от итератора вернет тот же итератор. Гораздо понятнее будет на примере:
l = [1, 2, 3, 4, 5]
it = iter(l)
it_2 = iter(it)
print(next(it)) # => 1
print(next(it_2)) # => 2
Итераторы очень полезны в отношении файлов. Так как каждый вызов итератора возвращает один элемент (в случае с файлами - строка), то в памяти будет находиться лишь одна строка, а не весь файл.
В этом уроке мы более подробно познакомились с итераторами и узнали об особенностях работы с ними. Так же создали аналог цикла for
на основе цикла while
. В следующем уроке поговорим о труднопереводимых на русский язык понятиях: list
, dict
и set comprehensions
(списковые включения или генераторы списков).
Тест
Похожие уроки Codebra
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ
Подписывайся на наш Telegram-канал!
Новости, полезный материал,
программирование и ИБ