我在下面有一个迭代器容器的虚拟示例(实际的容器读取的文件太大而无法容纳在内存中):
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))
如何检查通过传递迭代器容器而不是普通生成器的规范化功能?
最佳答案
首先:没有迭代器容器之类的东西。你有一个迭代。
可迭代产生一个迭代器。任何迭代器也是可迭代的,但会以迭代器形式产生:
>>> list_iter = iter([])
>>> iter(list_iter) is list_iter
True
如果
iter(ob) is ob
测试为false,则没有迭代器。关于python - 如何检查迭代器是否实际上是迭代器容器?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31245310/