Sobes.tech
Junior — Middle
97

Вақте ки усули __iter__ дар равандҳои такрор дар объект фаъол мешавад?

Ҷавоб аз AI

sobes.tech AI

Раванди __iter__ дар Python дар вақте ки оғоз меёбад, ки дар бораи объект итератсия оғоз мешавад, масалан, ҳангоми истифодаи цикл for. Тавре ки махсусан, вақте ки интерпретатор бо сохтор for element in obj: рӯбарӯ мешавад, он obj.__iter__()-ро барои гирифтани итератор даъват мекунад.

Ин итератор бояд усули __next__-ро иҷро кунад, ки ба он навбатии ояндаи пайдарпайро бармегардонад. Итератсия давом мекунад, то ки __next__ истиснои StopIteration-ро бардорад.

Масалан:

class MyRange:
    def __init__(self, n):
        self.n = n
    def __iter__(self):
        self.current = 0
        return self
    def __next__(self):
        if self.current < self.n:
            val = self.current
            self.current += 1
            return val
        else:
            raise StopIteration

for i in MyRange(3):
    print(i)

Ин ҷо, вақте ки ба цикл дохил мешавем, MyRange(3).__iter__() даъват мешавад, ки объекти-итераторро (дар ин ҳолат, ҳамон объекти худ) бармегардонад, ва сипас __next__ барои гирифтани унсурҳо даъват мешавад.