生成器是一种惰性的序列
,如果我们需要创建一个 0~1000000000 的序列,这样大的序列创建出来会占用比较多的内存,生成器就是为了解决这样的问题,可以让我们边使用边生成数据,在Python中,生成器
的构造,依靠函数
来完成。
# 普通序列
>>> l = []
>>> for x in range(10):
>>> l.append(x)
>>> l
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 生成器
def f():
for x in range(10):
yield x # 返回并记录函数状态
# next
f = f()
>>> next(f) # 每调用一次next,就执行一次yield | 依靠这种需要才生产的工作机制,大大的节省资源
0
>>> next(f)
1
>>> next(f)
...
# for next
>>> for x in range(10):
>>> print(next(f))
0
1
2
3
4
5
6
7
8
9
关键词: yield
、next
。
在循环篇 Python 推导式,我们列举了列表推导式
、字典推导式
、集合推导式
、但唯独没有元组推导式
,这是因为在Python中,元组是没有推导式的,元组的()
标示,被生成器所占用。
>>> g = (x * x for x in range(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
...