對生成器的理解

2021-08-09 22:56:15 字數 683 閱讀 8665

迭代器:

對於可迭代物件使用內建函式iter()獲取迭代器物件。

迭代器物件通過next()方法來訪問裡面的元素

當容器中沒有可訪問的元素後,next()方法將會丟擲乙個stopiteration異常終止迭代器。

列表生成式 例:[x**2 for x in range(n)]

生成器表示式:通列表解析語法,把列表解析的[ ]換成(),返回迭代器

生成器函式:generator

在函式中如果出現了yield關鍵字,那麼這個函式就是生成器函式

在生成器中,如果沒有return,則預設執行到函式完畢時返回stopiteration

在python2中有next方法,生成器函式中return後面不能有值

在python3中沒有next方法,生成器函式中return後面如果有值,那麼這個值為stopiteration異常的說明,不是程式的返回值

生成器支援的方法

close() 手動關閉生成器函式,後面的呼叫會直接返回stopiteration異常。

send() 生成器函式最大的特點是可以接受外部傳入的乙個變數,並根據變數內容計算結果後返回首先要通過g.send(none)或者next啟動生成器函式,並執行到第乙個yield語句結束的位置。

throw() 用來向生成器函式送入乙個異常,可以結束系統定義的異常,或自定義的異常。

生成器的理解

在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表所有資料都在記憶體中,如果有海量資料的話將會非常耗記憶體。如 僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。如果列表元素按照某種演算法推算出來,那我們就可以在迴圈的過程中不斷推算出後續的元素,這樣就不...

理解 Python 生成器

什麼時候呼叫,什麼時候計算並返回值 生成器僅僅儲存了一套生成數值的演算法,並且沒有讓這個演算法現在就開始執行,而是我什麼時候調它,它什麼時候開始計算乙個新的值,並給你返回。在python中,一邊迴圈一邊計算的機制,稱為生成器 generator。列表耗記憶體 列表所有資料都在記憶體中,如果有海量資料...

python 對生成器函式的深入理解練習題

def add a,b return a b 定義生成器函式 deftest for i in range 4 yield i g test 獲取生成器 for n in 1 2,10 gen i for i in range 10 是乙個有惰性機制的生成器 沒有元組推導式,因為建立推導式要進行增加...