生成器

什么是生成器对象?

一边循环一边计算的机制,称为生成器:generator

生成器和迭代器对象很像,都可以用来迭代获取其中的值,区别在于,迭代器只提供了生成器对象提供了.__iter__().__next__()接口,所以生成器对象也是可迭代对象和迭代器对象

在执行.__iter__()时生成器返回是自身

In [13]: g=(i for i in range(5))
In [14]: g.__iter__() is g
Out[14]: True

生成器对象的特点有哪些?

  • 按需生成
  • 存储获取数据的方法,而不是数据本身
  • 保存执行状态

什么是生成器迭代器(generator iterator)?

简单来说就是带有yield的函数,下面计算素数的例子中__iter__就是generator iterator

什么是生成器表达式(generator expression)?

通过一个表达式生成的生成器,例如:g = (i for i in range(7))

生成器计算素数

class PrimeNumbers():
    def __init__(self, start, end):
        self.start = start
        self.end = end

    def isPrimeNumber(self, num):
        if num < 2:
            return False
        for i in range(2, num):
            if num % i == 0:
                 return False
        return True

    def __iter__(self):
        for i in range(self.start, self.end + 1):
            if self.isPrimeNumber(i):
                yield i

prime_list = [i for i in PrimeNumbers(1, 100)]
print(prime_list)

补充理解图

dalao对于迭代器、生成器的理解

https://www.zhihu.com/question/24807364/answer/133606304

results matching ""

    No results matching ""