引言
计算机的内存是有限的,所以像下面这样的代码会占用大量内存
x = [i**2 for i in range(100000000)]
生成器就是为了解决这个问题而存在的,它不会存放所有的数据,而是要用一个就生成一个
例子
yield关键字相当于断点+return
def gen():
yield 1
yield 2
yield 3
t = gen()
print(next(t))
print(next(t))
print(next(t))
#output
#1
#2
#3
我们可以直观地看到使用生成器后使用空间明显变小
import sys
def Gen(n):
for i in range(n):
yield i
x = [i for i in range(666)]
t = Gen(666)
print(sys.getsizeof(t))
print(sys.getsizeof(x))
#output
#112
#5488