【发布时间】:2023-04-10 00:17:01
【问题描述】:
我在下面有一个迭代器容器的虚拟示例(真实的容器读取的文件太大而无法放入内存):
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))
如何检查规范化函数,我正在传递一个迭代器容器而不是一个普通的生成器?
【问题讨论】:
-
您不必一次将文件读入内存,为什么需要这个?
-
帕德莱克所说的。如果您需要对一个大文件执行多次传递,只需使用其
.seek()方法来回退它。 -
您可以编辑您的代码以使其可运行吗?将
self参数添加到__init__并将self.max_value用于__iter__
标签: python python-3.x generator