美文网首页
python生成器多次遍历(二)------创建生成器类

python生成器多次遍历(二)------创建生成器类

作者: PinoyCao | 来源:发表于2020-03-26 23:08 被阅读0次

回顾

上节介绍了通过使用函数itertools.tee复制生成器的方式来实现生成器多次遍历, 但这种方式为了复制出子生成器,仍需要花费额外的内存。
本节将介绍python生成器多次遍历的另一种方法------创建生成器类

思路

通过重写接口函数__iter__, 使类的对象可迭代;在迭代循环中使用关键词yield,使iter函数变成生成器函数。每次实例化一个对象,遍历对象都会产生一个会生成可迭代内容的生成器。

举例

斐波那契数列生成器

class Fibonacci:

    def __init__(self, num):
        self.a = 0  # 第0个数是0
        self.b = 1  # 第一个数是1
        self.index = 1  # 从1开始
        self.num = num  # 共有num个数字

    def __iter__(self):
        while self.index <= self.num:
            temp = self.a
            self.a, self.b = self.b, self.b + temp
            self.index += 1
            yield self.a

print(iter(Fibonacci(5)))
# <generator object Fibonacci.__iter__ at 0x10dc12258>
print(list(Fibonacci(5)))
# [1, 1, 2, 3, 5]
print([i for i in Fibonacci(5)])
# [1, 1, 2, 3, 5]

等差数列生成器:

class ArithmeticProgression:
    def __init__(self, begin, step, end=None):
        self.begin = begin
        self.step = step
        self.end = end  # 如果end为None,为无穷数列

    def __iter__(self):
        result = type(self.begin + self.step)(self.begin)
        forever = self.end is None  # forever为True, 数组为无穷数组
        index = 0
        while forever or result < self.end:
            yield result
            index += 1
            result = self.begin + self.step * index


ap = ArithmeticProgression(0, 1, 3)
print(list(ap))
# [0, 1, 2]

优点

真正做到了轻松多次遍历生成器且不占用额外的内存资源

缺点

当生成器中的内容产生过程十分复杂时,遍历生成器时会相当耗时。
时间空间有时不可兼得。

相关文章

  • python生成器多次遍历(二)------创建生成器类

    回顾 上节介绍了通过使用函数itertools.tee复制生成器的方式来实现生成器多次遍历, 但这种方式为了复制出...

  • ES6 生成器Generator

    生成器 生成器(Generators): 一个更好的方法来构建遍历器。 --- 生成器和迭代器 生成器就是一类...

  • 生成器 迭代器 装饰器

    生成器在Python中,这种一边循环一边计算的机制,称为生成器:generator。 创建生成器要创建一个生成器,...

  • python学习笔记----生成器

    生成器 在Python中,这种一边循环一边计算的机制,称为生成器:generator。 创建生成器方法1 要创建一...

  • python 生成器

    生成器 在Python中,这种一边循环一边计算的机制,称为生成器:generator。 创建生成器方法1 要创建一...

  • python 生成器

    生成器 在Python中,这种一边循环一边计算的机制,称为生成器:generator。 创建生成器方法1 要创建一...

  • python 生成器

    生成器 在Python中,这种一边循环一边计算的机制,称为生成器:generator。 创建生成器方法1 要创建一...

  • 14-核心编程2

    生成器 概念在Python中, 一边循环一边计算的机制, 称为生成器: generator 创建生成器: G = ...

  • python 实现生成器的几种方式

    一、通过列表生成器来实现 和列表生成式使用相似,将两边的[]改成()即可创建生成器 使用时直接对生成器进行遍历即可...

  • Python 生成器和迭代器

    生成器和迭代器 生成器 Python 列表推导和生成器表达式 在上文中简单介绍了生成器的作用。在列表推导创建列表时...

网友评论

      本文标题:python生成器多次遍历(二)------创建生成器类

      本文链接:https://www.haomeiwen.com/subject/mvshuhtx.html