Что такое генератор и чем отличается от итератора

Что такое генератор и чем отличается от итератора?

Можно сказать, что генератор является частным случаем итератора: он так же имеет методы __next__ и __iter__. Каждый генератор является итератором, но не наоборот.

Генератор использует для возврата значений ключевое слово yield.
Отличие в том, что генератор позволяет упростить код. Генератор не вычисляет и не содержит сразу все итерируемые значения, он генерирует их во время своей работы.

Пример генератора:


def fibonacci():
‧‧‧‧prev, cur = 0, 1
‧‧‧‧while True:
‧‧‧‧‧‧‧‧yield prev
‧‧‧‧‧‧‧‧prev, cur = cur, prev + cur


То есть, каждый элемент последовательности создается по очереди, и отсутствует заранее заготовленный итерируемый объект с данными.
Использование:


for i in fibonacci():
‧‧‧‧print(i)
‧‧‧‧if i > 100:
‧‧‧‧‧‧‧‧break


#сериал101 , #33

Это кросспост из моего Telegram-канала "Не Ван Россум", где я прямо сейчас пишу сериал "101 вопрос про Python" с описанием подводных камней, неочевидностей и загвоздок.