很抱歉,如果这是一个愚蠢的问题,但我无法理解它是如何运作的。
我定义了一个具有类似结构的迭代器(它有点复杂,但模型可以完成这项工作):
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)
但我怎么能循环呢?我是否总是需要手动调用方法?或者我只是使用错误的工具?
答案 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