生成器(generator)
生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束。
生成器是可迭代对象,是惰性求值的,在需要的时候才产生结果,而不是立即产生结果。列表推导式产生的是一个列表,结果已经存在于内存之中了。
可以减少内存消耗,提高代码可读性
生成器函数
example:生成自然数的平方
yield生成器
def a(N):
for i in range(N):
yield i ** 2
for b in a(5):
print b
普通函数
def a(N):
c = []
for i in range(N):
c.append(i*i)
return c
for b in a(5):
print b
生成器表达式
列表推导,将会一次产生所有结果
a = [x**2 for x in range(5)]
生成器表达式
a = (x**2 for x in range(5))
使用next获取每一个值
>>> next(a)
0
注意项
生成器只能遍历一次