Встречается на собеседованиях • сегодня

Как понимаешь фразу, что любой генератор это итератор, но не любой итератор это генератор

Генератор — это частный случай итератора, который создаётся с помощью функции с yield или генераторного выражения. Он лениво вычисляет значения по требованию и сохраняет состояние между вызовами.

Любой генератор является итератором, потому что он реализует методы __iter__() и __next__(). Однако не каждый итератор — генератор. Например, итератор может быть создан вручную через класс, реализующий протокол итератора:

python
class MyIterator:
    def __init__(self, max_val):
        self.current = 0
        self.max_val = max_val

    def __iter__(self):
        return self

    def __next__(self):
        if self.current < self.max_val:
            self.current += 1
            return self.current
        raise StopIteration

# Это итератор, но не генератор
it = MyIterator(5)
for num in it:
    print(num)

Генератор же создаётся проще и автоматически реализует протокол итератора:

python
def my_generator(max_val):
    current = 0
    while current < max_val:
        current += 1
        yield current

# Это и генератор, и итератор
gen = my_generator(5)
for num in gen:
    print(num)

Итог: генераторы — это удобный синтаксический сахар для создания итераторов, но не все итераторы являются генераторами.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы