Почему следующий код Python работает? - PullRequest
0 голосов
/ 13 января 2010
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

Ответы [ 4 ]

1 голос
/ 17 января 2010

Это итератор.

Обычно вы пишете это с помощью yield.

def Square(start, stop):
    for value in xrange(start, stop + 1):
        yield value ** 2

for i in Square(1, 4):
    print i,
1 голос
/ 13 января 2010

Это итератор Python: каждый раз в цикле вызывается метод next ()

1 голос
/ 13 января 2010

почему бы и нет? Для меня это выглядит как обычный итератор ...

метод next() - это «известный» метод в python, который наряду с методом __iter__() сигнализирует генератору.

Вот документы по питону для итераторов.

0 голосов
/ 13 января 2010

Типичный протокол итерации Python: 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...