为什么以下python代码有效?

时间:2010-01-13 03:12:56

标签: python syntax

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 个答案:

答案 0 :(得分:1)

为什么不呢?它对我来说看起来像是一个普通的迭代器......

next()方法是python中的一种“已知”方法,它与__iter__()方法一起发出信号。

Here is the python docs on iterators.

答案 1 :(得分:1)

这是一个Python迭代器:每次循环时都会调用next()方法

答案 2 :(得分:1)

这是一个迭代器。

通常情况下,你会用yield来写它。

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

for i in Square(1, 4):
    print i,

答案 3 :(得分:0)

典型的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