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

Можно ли написать генератор без слова yield

Да, можно создать объект-генератор без использования yield, используя генераторные выражения. Они имеют синтаксис, похожий на списковые включения, но заключаются в круглые скобки.

Пример:

python
gen = (x ** 2 for x in range(5))  # генераторное выражение
print(next(gen))  # 0
print(next(gen))  # 1

Также можно реализовать класс-итератор с методами __iter__ и __next__, который будет вести себя как генератор:

python
class SquareGenerator:
    def __init__(self, limit):
        self.n = 0
        self.limit = limit

    def __iter__(self):
        return self

    def __next__(self):
        if self.n < self.limit:
            result = self.n ** 2
            self.n += 1
            return result
        raise StopIteration

gen = SquareGenerator(5)
print(next(gen))  # 0

Оба подхода позволяют создавать ленивые итераторы без yield.

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

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

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

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