2

抱歉,如果这是一个愚蠢的问题,但我无法确定它是如何工作的。

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

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)

但是我怎样才能遍历它呢?我总是必须手动调用这些方法吗?还是我只是使用了错误的工具?

4

1 回答 1

7

问题之一是您混合了两个概念: iterable定义了一个__iter__()返回iterator的方法,但没有__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

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

class Iterable(object):
    def __iter__(self):
        i = 0
        while True:
            yield i
            i += 1
于 2012-06-22T13:41:37.290 回答