В чем разница между итератором и генератором?

Этот вопрос проверяет знание ключевых понятий 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  

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

Уровень

  • Рейтинг:

    3

  • Сложность:

    5

Навыки

  • Python

Ключевые слова

Подпишись на Python Developer в телеграм