【python學習筆記】Python生成器yield

leason-love發表於2017-09-18

生成器(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

注意項

生成器只能遍歷一次

leason | blog

相關文章