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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章