Sobes.tech
Back to questions
Junior — Middle
52

Можно ли реализовать функцию-генератор в языке программирования без использования ключевого слова yield?

Answer from AI

sobes.tech AI

Да, функцию-генератор в Python можно реализовать без использования ключевого слова yield, например, с помощью класса, реализующего итератор. Такой класс должен иметь методы __iter__() и __next__(), которые будут возвращать следующий элемент последовательности при каждом вызове.

Пример реализации генератора чисел Фибоначчи без yield:

class Fib:
    def __init__(self, n):
        self.n = n
        self.i = 0
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.i >= self.n:
            raise StopIteration
        self.i += 1
        a = self.a
        self.a, self.b = self.b, self.a + self.b
        return a

for num in Fib(5):
    print(num)

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