生成器

  生成器(generator)是构造可迭代对象的一种简单方式。与函数直接返回单个值不同,生成器以延迟的方式返回一个值的序列,每次返回一个值后暂停,直到下一个值被请求。创建生成器只需将函数中的return替换为yeild即可:

1
2
3
4
def gen():
for x in range(100):
yield x ** 2
g = gen()

  它也可以使用另一种更简洁的表达式来构造。它类似与列表、字典和集合的推导式,将列表推导式的方括号改为圆括号即可:

1
gen = (x ** 2 for x in range(100))

生成器表达式可以取代列表推导式,直接作为函数参数:

1
2
3
4
sum(x ** 2 for x in range(100))
sum([x ** 2 for x in range(100)]) # 与上一条等价

dict((i, i ** 2) for i in range(5))