生成器(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
注意項
生成器只能遍歷一次