在python
中我們常聽到迭代器和生成器,但是本人分開來介紹,只為告訴大家迭代器和生成器不是乙個東西,在上篇文章中我們詳細的介紹過迭代器和可迭代物件,本章重點介紹生成器。
對於呼叫乙個普通的python
函式,一般是從函式的第一行**開始執行,結束於return
語句、異常或者函式所有語句執行完畢。一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失。再次呼叫這個函式時,一切都將從頭建立。python
是通過生成器來實現類似於協同程式的概念:生成器可以暫時掛起函式,並保留函式的區域性變數等資料,然後在再次呼叫它的時候,從上次暫停的位置繼續執行下去。
協同程式(協程)一般來說是指這樣的函式
幾個方法的介紹
2、close
方法
這個方法用於關閉生成器。對關閉的生成器後再次呼叫next
或send
將丟擲stopiteration
異常
yield from
是python3.3
後新加的語言結構。yield from
的主要功能是開啟雙向通道,把最外層的呼叫方法與最內層的子生成器連線起來。這兩者就可以進行傳送值和返回值了,yeild from
結構的本質是簡化巢狀的生產器,不理解這個是什麼意思的話,下面我將用幾個例子來對其使用方法進行講解
一般場景使用方式
def
gene()
:for c in
'ab'
:yield c # 遇到yeild程式返回迴圈,下次從yeild後面開始。
for i in
range(3
):yield i
if __name__ ==
"__main__"
:print
(list
(gene())
)# list內部會預激生成器
使用yield..from
的時候def
gene1()
:yield
from
'ab'
yield
from
range(3
)if __name__ ==
"__main__"
:print
(list
(gene1())
)
python中生成器
生成器 生成器generator 生成器函式generator m i for i in range 5 定義乙個生成器 print type m 判斷m的型別,是乙個生成器 print next m 使用next函式 def inc 定義乙個inc函式 for i in range 5 yield...
python中生成器yield
def yield demo for x in range 3 yield x print 生成器後一行 a yield demo print a 這裡的a是乙個生成器物件 可以用for迴圈來遍歷生成器物件裡的元素 for i in a print i 那麼yield的工作過程是怎麼樣的呢?可以通過...
python中生成器的應用
生成器的應用 實現多工 import time def task 1 while true print 1 time.sleep 0.1 yield def task 2 while true print 2 time.sleep 0.1 yield task 1 task 2 def main t...