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__ барои гирифтани унсурҳо даъват мешавад.