迭代器:
對於可迭代物件使用內建函式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 是乙個有惰性機制的生成器 沒有元組推導式,因為建立推導式要進行增加...