循环迭代器

Yum*_*Tum 2 python iterator python-3.x

对不起,如果这是一个愚蠢的问题,但我无法理解它是如何工作的.

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

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)
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ach 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
Run Code Online (Sandbox Code Playgroud)

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

class Iterable(object):
    def __iter__(self):
        i = 0
        while True:
            yield i
            i += 1
Run Code Online (Sandbox Code Playgroud)