В чем отличие итератора от генераторного выражения?
Пример:
a = iter([i ** 2 for i in range(10000)])
b = (i ** 2 for i in range(10000))
В чем существенная разница?
В переменной a находится итератор списка, пройдя поэлементно мы получим определенные значения, а в переменной b находится генераторное-выражение, пройдясь поэлементно по которому мы получим те же самые значения. Так в чем же отличие?
Ответы (1 шт):
Итератор - любой объект, которые реализует метод __iter__. Генератор - объект который вычисляет значение по мере необходимости, т.е. каждый раз когда его просят. Любой генератор это итератор, но не наоборот.
В вашем примере если заменить 10000 на 10**100, то первый вариант займёт всю память и полностью остановит программу. Второй пример будет работать нормально, потому что он не будет считать все значения сразу, а только когда понадобится.