以下是一个迭代器容器的虚拟示例(真实的示例读取的是一个太大以至于无法放入内存的文件):
class DummyIterator:
def __init__(self, max_value):
self.max_value = max_value
def __iter__(self):
for i in range(self.max_value):
yield i
def regular_dummy_iterator(max_value):
for i in range(max_value):
yield i
这使我能够多次迭代值,以便我可以实现类似以下的内容:
def normalise(data):
total = sum(i for i in data)
for val in data:
yield val / total
# this works when I call next()
normalise(DummyIterator(100))
# this doesn't work when I call next()
normalise(regular_dummy_iterator(100))
如何在normalise函数中检查传递给我一个迭代器容器而不是普通的生成器?
.seek()
方法将其倒回即可,就像Padraic所说的那样。 - PM 2Ring__init__
中添加self
参数,并在__iter__
中使用self.max_value
。 - 301_Moved_Permanently