• python迭代器和生成器


    迭代器

    迭代器有两个基本的方法:iter() 和 next()

    list = [1,2,3,4]
    it = iter(list)  # 创建迭代器
    print(next(it))===>1   输出迭代器的下一个元素
    print(nexy(it))===>2

    创建一个迭代器

    把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

    Python 的构造函数为 __init__(), 它会在对象初始化的时候执行。

    __iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。

    __next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。

    创建一个返回数字的迭代器,初始值为 1,逐步递增 1:

    示例:

    class MyNumbers:
        def __iter__(self):
            self.a = 1
            return self
    
        def __next__(self):
            b = self.a
            self.a += 1
            return b
    
    
    nums = MyNumbers()
    num = iter(nums)
    print(next(num))
    print(next(num))
    print(next(num))
    print(next(num))
    print(next(num))

    结果如下:

    1
    2
    3
    4
    5

    StopIteration

    StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

    在 10 次迭代后停止执行:

    class MyNumbers:
        def __iter__(self):
            self.a = 1
            return self
    
        def __next__(self):
            if self.a < 10:
                b = self.a
                self.a += 1
                return b
            else:
                raise StopIteration
    
    
    nums = MyNumbers()
    num = iter(nums)
    for i in num:
        print(i)

    结果:

    1
    2
    3
    4
    5
    6
    7
    8
    9

    生成器

    在 Python 中,使用了 yield 的函数被称为生成器(generator)。

    跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

    在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

    调用一个生成器函数,返回的是一个迭代器对象。

  • 相关阅读:
    nginx upstream负载均衡配置
    什么是任务编排、服务发现、服务间依赖怎么处理?
    python celery 错误重试配置
    rust cargo 从入门到放弃
    python 日志模块再熟悉
    python signal笔记
    Fabric使用笔记
    webpack 笔记
    sphinx-python文档化
    Docker笔记
  • 原文地址:https://www.cnblogs.com/1510152012huang/p/11239394.html
Copyright © 2020-2023  润新知