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生成器生成的時候狀態時gen_createdstep2 genstate is gen_suspended
step3 genstate is gen_suspended
執行第乙個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,執行後返回...