Sobes.tech
Junior — Middle
96

Python-да yield операторын қолданбай, генераторға ұқсас функцияны қалай жасауға болады?

AI-дан жауап

sobes.tech AI

Python-да yield операторын қолданбай генератордың баламасын жүзеге асыруға болады, ол үшін итераторды жүзеге асыратын класс құру керек. Ол үшін __iter__() және __next__() әдістерін анықтау қажет.

yield қолданбай Фибоначчи сандар генераторының мысалы:

class Fib:
    def __init__(self, max_count):
        self.max_count = max_count
        self.count = 0
        self.a, self.b = 0, 1

    def __iter__(self):
        return self

    def __next__(self):
        if self.count >= self.max_count:
            raise StopIteration
        self.count += 1
        value = self.a
        self.a, self.b = self.b, self.a + self.b
        return value

# Қолдану:
for num in Fib(5):
    print(num)

Мұндай класс генератор сияқты әрекет етеді, бірақ yield қолданбайды. Итерация класс әдістері арқылы жүзеге асады.