Встречается на собеседованиях • сегодня
Как понимаешь фразу, что любой генератор это итератор, но не любой итератор это генератор
Генератор — это частный случай итератора, который создаётся с помощью функции с 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)Итог: генераторы — это удобный синтаксический сахар для создания итераторов, но не все итераторы являются генераторами.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы