В чем отличие итератора от генераторного выражения?

Рейтинг: 2Ответов: 1Опубликовано: 13.03.2023

Пример:

a = iter([i ** 2 for i in range(10000)])
b = (i ** 2 for i in range(10000))

В чем существенная разница?

В переменной a находится итератор списка, пройдя поэлементно мы получим определенные значения, а в переменной b находится генераторное-выражение, пройдясь поэлементно по которому мы получим те же самые значения. Так в чем же отличие?

Ответы

▲ 3Принят

Итератор - любой объект, которые реализует метод __iter__. Генератор - объект который вычисляет значение по мере необходимости, т.е. каждый раз когда его просят. Любой генератор это итератор, но не наоборот.

В вашем примере если заменить 10000 на 10**100, то первый вариант займёт всю память и полностью остановит программу. Второй пример будет работать нормально, потому что он не будет считать все значения сразу, а только когда понадобится.