python中生成器的使用

2021-09-03 00:22:08 字數 1298 閱讀 6572

python中我們常聽到迭代器和生成器,但是本人分開來介紹,只為告訴大家迭代器和生成器不是乙個東西,在上篇文章中我們詳細的介紹過迭代器和可迭代物件,本章重點介紹生成器。

對於呼叫乙個普通的python函式,一般是從函式的第一行**開始執行,結束於return語句、異常或者函式所有語句執行完畢。一旦函式將控制權交還給呼叫者,就意味著全部結束。函式中做的所有工作以及儲存在區域性變數中的資料都將丟失。再次呼叫這個函式時,一切都將從頭建立。python是通過生成器來實現類似於協同程式的概念:生成器可以暫時掛起函式,並保留函式的區域性變數等資料,然後在再次呼叫它的時候,從上次暫停的位置繼續執行下去。

協同程式(協程)一般來說是指這樣的函式

幾個方法的介紹

2、close方法

這個方法用於關閉生成器。對關閉的生成器後再次呼叫nextsend將丟擲stopiteration異常

yield frompython3.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...