В чем разница между итератором и генератором?
Этот вопрос проверяет знание ключевых понятий Python, таких как итерации и ленивые вычисления.
Короткий ответ
Итератор — это объект, который реализует протокол итерации (__iter__ и __next__). Генератор — это функция, которая возвращает итератор и использует ключевое слово yield для сохранения состояния между вызовами.
Длинный ответ
Итератор — это объект, с помощью которого можно проходить по элементам коллекции один за другим. Он реализует методы __iter__ (возвращает самого себя) и __next__ (возвращает следующий элемент или вызывает StopIteration, если элементы закончились).
Пример:
my_list = [1, 2, 3]
iterator = iter(my_list)
print(next(iterator)) # 1
print(next(iterator)) # 2
Генератор — это упрощенный способ создания итераторов. Он создается с помощью функции, содержащей yield, и сохраняет свое состояние между вызовами.
Пример:
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
print(next(gen)) # 1
print(next(gen)) # 2
Генераторы удобны для работы с большими объемами данных, так как не загружают их полностью в память.