python生成器筆記

2021-08-20 08:21:06 字數 1260 閱讀 5137

生成器:自動實現了迭代器協議(物件必須提供乙個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語句...