简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。
列表是 python 中常用的一种数据结构。但如果列表中的元素非常多,这时如果把这些元素一次性地都放入到列表中会造成内存的严重消耗。
如果列表中的元素非常多,且有规律可循,这时可以考虑使用生成器的方式存储。生成器并不是直接存储这些元素,而是在迭代过程中推算出下一个元素是什么。
一、以列表生成式的方式创建生成器
创建生成器的一种简单方式是将列表生成式中的 "[]" 改为 "()" 即可。生成器可以使用 for 循环来遍历其中的各个元素。如下是创建生成器并遍历其中各个元素的示例。
# 创建生成器
gen = (x for x in range(5))
# 遍历生成器中的每个元素
for x in gen:
print(x)
执行结果:
0
1
2
3
4
二、以函数的方式创建生成器
如果列表中元素的规律比较复杂,复杂到无法通过列表生成式的方式来创建相应生成器的情况下,还可以通过函数的方式来创建相应的生成器。
这里以创建斐波那契数列相对应的生成器为例来说明。
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
gen = fib(6)
for x in gen:
print(x)
执行结果如下:
1
1
2
3
5
8
当一个函数中包含了 yield 关键字后,这个函数就不是一个普通的函数了,而是一个生成器。
为了方便理解以函数的方式创建生成器的代码,可以将生成器看做一个队列,一开始该队列中没有任何元素,在函数执行时,每次遇到 yield 关键字,便会将 yield 关键字后面的值放入队列中。最后该队列中的元素便是生成器对应的元素。
参考
https://www.liaoxuefeng.com/wiki/1016959663602400/1017318207388128
网友评论