Итераторы и генераторы Python

Достаточно сложная и интересная тема – итераторы и генераторы Python, изучив которую вы по другому начнете смотреть на цикл for, и возможно, такие типы данных данных, как list.

Итерейбл (iterable – перебираемый) – это объект, элементы которого можно перебрать в цикле. Это листы, строки, кортежи, словари и т.д.

Итерейторы (iterators – переборщик или перебиратель) и его можно получить при помощи метода __iter__ или функции iter() из итерейбл объекта.

number_list = [1, 5, 2, 3, 4, 7] #имеем список чисел
number_list_iterator = iter(number_list) # применяем к нему функцию iter() и результат записываем в переменную

print(number_list_iterator)
print(type(number_list_iterator))

Получаем следующий ответ:

<list_iterator object at 0x000001B5BDF49840>
<class 'list_iterator'>

В первои во втором случае мы видим, что тип данных имеем: list_iterator

Для чего же нужны итераторы?
Дело в том, что в цикле for не явно используются итераторы! Для итератора можно вызвать метод __next__, именно этот метод переходит к следующему элементу объекта iterable

Дандро метод __next__ переходит к следующему элементу объекта итерейбл, именно с его помощью мы перебираем все элементы объекта iterable.

Итак: элементы объекта iterable перебираются при помощи iterator
number_list = [1, 5, 2, 3, 4, 7] # исходный список
number_list_iterator = iter(number_list) # создаем итератор
print(number_list_iterator.__next__()) # получаем первый элемент
print(number_list_iterator.__next__()) # получаем второй элемент

Стоит помнить, что если мы примерим метод __next__() больше раз, чем есть элементов итераторе, то мы получим ошибку StopIteration, потому что нет больше элементов, которые можно перебирать!

Кроме метода __next__(), мы можем использовать и функцию next(), передавая в нее в качестве параметра iterable

number_list = [1, 5, 2, 3, 4, 7]
number_list_iterator = iter(number_list)
print(next(number_list_iterator))
print(next(number_list_iterator))
Рейтинг
( 1 оценка, среднее 5 из 5 )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: