我在下面有一个迭代器容器的虚拟示例(真实的示例读取一个太大而无法放入内存的文件):
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
测试为假,则您没有迭代器。
关于python - 如何检查迭代器是否实际上是迭代器容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31245310/