Python 生成器

生成器

生成器是一种惰性的序列,如果我们需要创建一个 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

关键词: yieldnext


生成器推导式

在循环篇 Python 推导式,我们列举了列表推导式字典推导式集合推导式、但唯独没有元组推导式,这是因为在Python中,元组是没有推导式的,元组的()标示,被生成器所占用。

>>> g = (x * x for x in range(10))
>>> next(g)
0
>>> next(g)
1
>>> next(g)
...
Python 教程 Python 入门 Python 时间 Python JSON