3. Что такое генератор?

3. Что такое генератор?.md

Генератор - тип итератора, который генерирует последовательность по одному с помощью ключевого слова yield

Обычно генератор создаётся:
- с помощью функции с yield
- или генераторного выражения

Он:
- работает лениво (lazy evaluation)
- сохраняет своё состояние между вызовами
- позволяет эффективно работать с большими данными


Простое объяснение

Генератор - это как автомат, который выдаёт значения по одному.

Ты не получаешь сразу весь список.
Ты запрашиваешь:
- первый элемент → получаешь
- второй → получаешь
- и так далее

Он запоминает, где остановился, и продолжает с этого места.


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

Итератор - это общий механизм, который возвращает элементы по одному.
Генератор - это удобный способ создать итератор с помощью yield.

Коротко:

итератор — общее понятие
генератор — частный случай итератора


Более глубокое объяснение и пример

Генератор создаётся через yield.

def my_generator():
    yield 1
    yield 2
    yield 3

Когда вызываешь функцию:

gen = my_geterator()

Она не выполняется полностью и не возвращает список.
Она возвращает генераторный объект.

Далее:

print(next(gen))  #1
print(next(gen))  #2
print(next(gen))  #3

Когда и зачем используется

Генераторы используют, когда:
- данных много (файлы, базы, логи)
- не нужно хранить всё в памяти
- нужна потоковая обработка

def read_lines(filename):
    with open(filename) as f:
        for line in f:
            yield line.strip()

Здесь файл читается построчно, а не целиком.


Генератор - это частный случай итератора, который позволяет получать значения по одному с помощью yield, не создавая их все сразу.