python - 如何检查迭代器是否实际上是迭代器容器?

标签 python python-3.x generator

我在下面有一个迭代器容器的虚拟示例(真实的示例读取一个太大而无法放入内存的文件):

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/

相关文章:

javascript - 遍历 ES6 中的生成器

javascript - 发电机真的有侵入性吗

python - 我应该如何评估浮点 numpy 矩阵的等价性?

python - 获取到下一小时开始的秒数

python - 无法通过串行/Modbus 从 Windows 10 连接到 EPsolar Tracer 3210an 充电 Controller

python-3.x - `key` 用于在 PEP 3113 之后对没有魔数(Magic Number)的元组进行排序的函数

Python 迭代器(生成器)删除源,仍然有效。到底是怎么回事?

python - 如何在填充整个单元格时左对齐 Python tkinter 网格列

python - 如何 pickle 包含模块和类的字典?

python - 如何将 Pandas 对象而不是整个数据帧转换为字符串?