生成器:自動實現了迭代器協議(物件必須提供乙個next方法,執行改方法要麼返回迭代中的下一項,要麼就引起乙個stopiteration的異常,以終止迭代(只能往後走不能往前進))
第一種形式:idter=(i for i in range(10))
idter為乙個生成器,有next()方法,idter.__next__()---------python3 idter.next()----------------python2
第二種形式:
函式中的生成器:
def test():
yield 1
yield 2
yield和return都是返回函式的值,但是yield可以多次返回,只需要用next()方法來實現
生成器的好處
吃飽子問題:
def prduct_baozi():
ret=
for i in range(100):
return ret
生成器可以保留函式的執行的上一次的狀態
生成器總結:
語法上和函式的類似:生成器函式和常規的函式幾乎是相同的,他們都是使用def語句進行定義,差別在於,生成器使用yield語句返回乙個值,而常規函式使用return返回乙個值
自動實現迭代器協議:對於生成器,python會自動實現迭代器協議,以便於應用到迭代背景中(如for迴圈,sum函式)。由於生成器自動實現了迭代器協議,所以,我們可以呼叫它的next()方法,並且,在沒有可以返回的時候,生成器會自動產生stopiteration異常
狀態掛起: 生成器使用yield語句返回乙個值,yield語句掛起改生成器的狀態,保留足夠的資訊,以便之後從它離開的地方繼續執行
優點:生成器的好處是延遲計算,一次返回乙個結果也就是說,它不會一次生成所有的結果,這對於大多數的資料處理來說
列表解析:
sum([i for i in range(100000000000000000)]) #占用記憶體太大,機器容易卡死
生成器表示式:
sum(i for i in range(100000000000) ) #幾乎不佔記憶體
優點:生成器還可以有效的提高**的可讀性
Python筆記 生成器
日期 20170925 python中有乙個很有趣的東東,叫生成器。我們先來看看簡單的 1,usr bin python3 defmygenerator for n in range 1,4 yield n return done print mygenerator print num mygene...
python筆記 生成器
python筆記 生成器 好記性不如爛筆頭,學習從摘抄開始!1.通過列表生成式 列表推導式 我們可以直接建立乙個 列表。但是,受到記憶體限制,列表容量肯定是有限的。2.建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,3.如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪...
Python生成器筆記
python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...