注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
本文阅读时间约为2分钟。
什么是生成器
生成器(generator)是用来创建数据序列的一种对象。
使用生成器可以迭代庞大的血液,且不需要在内存中创建和存储整个序列。
生成器通常是为迭代器产生数据的。
生成器函数
生成器推导式可以创建比较简单的序列;如果要创建一个比较大的序列,则需要生成器函数来实现。
生成器函数与普通函数不同的地方,在于将return换成了yield。
def even_number(max):
n = 0
while n < max:
yield n
n += 2
生成器和yield关键字
yield跟生成器息息相关。包含yield语句的函数就是一个生成器。
生成器每次产生一个值(yeild语句),函数被冻结,直到被唤醒后再产生一个值。
yield语句一般与循环搭配在一起。
生成器的本质就是迭代器,因此yield可以看作是可迭代的return,return只能返回一次,而yield可以迭代性地返回多次。
def gen(n):
for i in range(n):
yield i ** 2
for i in gen(5):
print(i, " ", end="")
0 1 4 9 16
list(gen(5)) #gen(5)是一个生成器generator。
Out[3]: [0, 1, 4, 9, 16]
生成器的优势
生成器相比一次列出所有内容的列表等的优势是:
- 更节省空间;
- 更快的响应速度;
- 更加灵活的使用。
To be continued.