Python筆記 生成器

2021-08-08 18:18:13 字數 1400 閱讀 4337

日期:20170925

python中有乙個很有趣的東東,叫生成器。

我們先來看看簡單的**,

**1,

#!/usr/bin/python3

defmygenerator

():for n in range(1, 4)

yield n

return

"done"

print(mygenerator)

print

num=mygenerator()

print(num)

print(next(num))

print(next(num))

print(next(num))

執行2,

[penx@ali01 python3]$ ./example_generator.py 

mygenerator at 0x7fa4e9cf2578>

mygenerator at 0x7f4639a27730>12

3[penx@ali01 python3]$

python中,定義生成器和定義普通函式差不多,只是內部多了yield

yieldreturn的用法差不多,後面接乙個返回物件。上面**就是在乙個for中用yield分別返回1,2,3。

當然,如果和return一樣的話,就沒必要用yield,對不對?後面慢慢解釋。

定義完乙個生成器,我們需要建立它的例項才可以用。num=mygenerator()

之後,我們需要把生成器的例項放入next()中,獲取下乙個值。**中連續呼叫了3次next(num),3次分別獲取num的值1,2,3。

這裡,我們就可以表面理解「生成器」的意思,

生成器是一種可以不斷獲取下乙個值的東東(物件)。

解析

其實yield不難理解,

next()取第乙個值時,生成器函式就會執行。

遇到乙個yield後,就會返回,這裡可以選擇返回乙個值。和return很像。

但之後再next乙個值,生成器函式並沒有像普通函式那樣重頭執行,而是在上一次yield那裡開始執行。這就是生成器的機關。

生成器yield的剖析,

python生成器筆記

生成器 自動實現了迭代器協議 物件必須提供乙個next方法,執行改方法要麼返回迭代中的下一項,要麼就引起乙個stopiteration的異常,以終止迭代 只能往後走不能往前進 第一種形式 idter i for i in range 10 idter為乙個生成器,有next 方法,idter.nex...

python筆記 生成器

python筆記 生成器 好記性不如爛筆頭,學習從摘抄開始!1.通過列表生成式 列表推導式 我們可以直接建立乙個 列表。但是,受到記憶體限制,列表容量肯定是有限的。2.建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,3.如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪...

Python生成器筆記

python中三大器有迭代器,生成器,裝飾器,本文主要講述生成器。主要從生成器的概念,本質,以及yield關鍵字的使用執行過程。本質 生成器是一類特殊的迭代器,使用了yield關鍵字的函式不再是函式,而是生成器。使用了yield的函式就是生成器 1.yield關鍵字有兩點作用 1.1 yield語句...