class Square: def __init__(self,start,stop): self.value = start - 1 self.stop = stop def __iter__(self): return self def next(self): if self.value == self.stop: raise StopIteration self.value += 1 return self.value ** 2 for i in Square(1,4): print i,
Какие выходы
1 4 9 16
Это итератор.
Обычно вы пишете это с помощью yield.
def Square(start, stop): for value in xrange(start, stop + 1): yield value ** 2 for i in Square(1, 4): print i,
Это итератор Python: каждый раз в цикле вызывается метод next ()
почему бы и нет? Для меня это выглядит как обычный итератор ...
метод next() - это «известный» метод в python, который наряду с методом __iter__() сигнализирует генератору.
next()
__iter__()
Вот документы по питону для итераторов.
Типичный протокол итерации Python: for y in x... выглядит следующим образом:
for y in x...
iter = x.__iter__() # get iterator try: while 1: y = iter.next() # get each item ... # process y except StopIteration: pass # iterator exhausted
из http://www.boost.org/doc/libs/1_41_0/libs/python/doc/tutorial/doc/html/python/iterators.html