生成器
什么是生成器对象?
一边循环一边计算的机制,称为生成器: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)