Python高階篇 生成器

2021-10-06 14:37:27 字數 1401 閱讀 3035

python中有很多方便遍歷的資料結構。這些結構都是iterable物件。主要包括一下集中

集合資料型別(list、tuple、dict、set、str等)和生成器(generator)

集合資料型別對於大家應該不是難題,這裡重點來**一下generator這個有點複雜的迭代物件。

首先來看一下如何生成generator物件, 這裡主要有兩種方式。

第一種:

>>

> g =

(i for i in

range(10

))>>

> g

at 0x00000191c9916bf8

>

>>

>

next

(g)0

>>

>

第二種:函式使用yield關鍵字,這是就會生成乙個generator,具體用法如下。

from inspect import getgeneratorstate

defgenerator_state

(n):

while n >0:

yield n

n -=

1if __name__ ==

"__main__"

: gen = generator_state(6)

print

("step1 genstate is "

, getgeneratorstate(gen)

)next

(gen)

print

("step2 genstate is "

, getgeneratorstate(gen)

)next

(gen)

print

("step3 genstate is "

, getgeneratorstate(gen)

)

執行結果如下

step1 genstate is gen_created

step2 genstate is gen_suspended

step3 genstate is gen_suspended

生成器生成的時候狀態時gen_created

執行第乙個next(gen)的時候生成器的狀態修改為gen_suspended。

這是generate_state() 函式執行到yield n這一行,後邊**等待下乙個next執行的時候會被執行到。

生成器整體來說不是很難,但是在協程裡邊用起來的時候,需要先發乙個 gen.send(none)或者先執行next(gen),來啟用生成器,這一點在最開始的時候沒有明白,知道看到一篇關於generator狀態的的文章菜恍然大悟。希望這些能對大家有幫助。

生成器高階

def generator print 123 count yield 1 print count print 456 yield 2g generator ret g.next print ret ret g.send 套你大象 send的效果與next一樣 send在獲取下乙個值時,會在上乙個y...

Python高階 生成器(Generators)

迭代器是乙個讓程式設計師可以遍歷乙個容器 特別是列表 的物件。然而,乙個迭代器在遍歷並讀取乙個容器的資料元素時,並不會執行乙個迭代。維基百科 可迭代物件 iterable python中任意的物件,只要它定義了可以返回乙個迭代器的iter方法,或者定義了可以支援下標索引的getitem方法 這些雙下...

python 生成器作用 Python生成器

生成器介紹 在函式內部包含yield關鍵字,那麼該函式執行的結果是生成器,生成器就是迭代器。生成器的功能 把函式結果做成迭代器 以一種優雅的方式封裝好iter,next 提供了一種自己定義迭代器的方式。使用生成器建立乙個迭代器 def a print a yield 11 使用yield,執行後返回...