循环迭代器

时间:2012-06-22 13:36:27

标签: python python-3.x iterator

很抱歉,如果这是一个愚蠢的问题,但我无法理解它是如何运作的。

我定义了一个具有类似结构的迭代器(它有点复杂,但模型可以完成这项工作):

class MyIterator ():

    def __init__(self):
        print ('nothing happening here')

    def __iter__ (self):
        self.a_list=[x for x in range (10)]
        for y in a_list:
            print(y)


    def __next__ (self):
        self.a_list = [x+1 for x in self.a_list]
        for y in a_list:
            print (y)

但我怎么能循环呢?我是否总是需要手动调用方法?或者我只是使用错误的工具?

1 个答案:

答案 0 :(得分:7)

其中一个问题是你混合了两个概念:和 iterable 定义了一个返回迭代器__iter__()方法, 但没有__next__()方法。 迭代器依次定义了一个 __next__()方法,以及一个简单的__iter__()实现 返回self。像这样:

class Iterable(object):
    def __iter__(self):
        return Iterator()

class Iterator(object):
    def __init__(self):
        self.i = 0
    def __iter__(self):
        return self
    def __next__(self):
        result = self.i
        self.i += 1
        return result

另一种方法是将iterable的__iter__()方法定义为生成器函数

class Iterable(object):
    def __iter__(self):
        i = 0
        while True:
            yield i
            i += 1