python 可迭代对象、迭代器和生成器的关系

  • Iterable: 可迭代对象
  • Iterator: 迭代器
  • Generator: 生成器

Iterable: 可迭代对象>Iterator: 迭代器>Generator: 生成器

可以用下面的代码验证。关于具体的区别点击👉https://www.liaoxuefeng.com/wiki/1016959663602400/1017323698112640

from typing import Generator, Iterable, Iterator


def createAGenerator(a=100):
    """这是一个生成器函数,用于创建生成器

    Args:
        a (int): 一个值,用于影响生成器的容量

    Returns:
        [list]: [while循环结束后,所有i的列表]

    Yields:
        [int]: [在while循环中的i]
    """
    i = 0
    arg = []
    while i <= a:
        arg.append(i)
        yield i
        i = 1.5 * (i + 1)
    return arg


def testCreateAGen(arg=None):
    """检测生成器

    Args:
        arg ([generator], optional): 一个生成器. Defaults to None.
    """
    while True:
        try:
            i = next(arg)
            print(i)
        except StopIteration as e:
            print(e.value)
            break


def testIter(itere=None):
    """检测不同的参数是否为可迭代对象"""
    print(
        itere,
        "\tIterable: ",
        isinstance(itere, Iterable),
        ",Iterator: ",
        isinstance(itere, Iterator),
        ",generator: ",
        isinstance(itere, Generator),
    )
    print("----------------------------")


if __name__ == "__main__":
    # 元组和list的属性(可迭代对象)
    testIter((12, 32, 34))
    testIter([12, 324, 342, 234])
    testIter({"name": "suyuesheng", "sex": "man"})
    # 迭代器的属性
    testIter(iter([13, 23211, 14]))
    # 生成器的属性
    testIter((x for x in range(100)))
    print(type((x for x in range(100))))
    print(type(iter([12, 21, 312])))
    testIter(createAGenerator())
    # 檢測生成器
    # print("----------------------------")
    testCreateAGen(createAGenerator())

posted @ 2021-10-07 23:29  sogeisetsu  阅读(89)  评论(0编辑  收藏  举报