python生成器中yield和send分析

2022-05-17 07:13:10 字數 1171 閱讀 8198

在python中生成器是指用**實現迭代器的的功能本質還是迭代器,只不過是**實現迭代器功能。在python中生成器是由函式實現的,通常我們在函式中加入yeild就可以實現生成器。

#定義乙個函式

def func():

print(111)

yield 3

print(222)

g=func()

執行上面**你會發現函式根本沒有執行,因為此時g是乙個生成器物件,生成器是不會自己執行的,需要你呼叫next方法才會執行,並且每次遇到yield就會停止,繼續呼叫next方法才會繼續執行直到下乙個yield。

def func():

print(111)

yield 3

print(222)

g=func()

print(g.__next__())

執行結果:

可以看列印了111,222並沒有列印,說明函式執行到yield就停止了,3是yield的返回值。

yield的作用主要有兩個:1、暫定當前函式的執行。2、可以返回值給呼叫者

send的用法類似於next()方法都可以使函式繼續執行,並且可以傳送值給上乙個yield

def func1():

# print(1)

count = yield 6

print(count)

# print(2)

count1 = yield 7

print(count1)

# print(3)

yield 8

# g = func1()

# next(g)

# # g.send('alex')

# g.send('alex')

# g.send('太白')

# g.send('太白')

send 與next一樣,也是對生成器取值(執行乙個yield)的方法。

send 可以給上乙個yield 傳值。

第一次取值永遠都是next。

最後乙個yield 永遠也得不到send傳的值。

Python之生成器(yield)

這裡是一段防爬蟲文字,請讀者忽略。本文原創首發於csdn,作者idys 部落格首頁 生成器函式 迭代器一定是可迭代物件,可迭代物件不一定是迭代器 def inc for i in range 5 yield i print type inc print type inc x inc print ty...

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中的生成器與yield

在python中使用了yield關鍵字的函式稱之為生成器。當我們呼叫該函式時並不會執行函式 而是返回乙個生成器物件。在呼叫生成器執行的過程中,每次遇到yield函式就會暫停並儲存當前的資訊,返回yield值,並在下次執行next 時,從此處開始繼續執行。from collections.abc im...