Python筆記 生成器方法send

2021-08-08 18:26:28 字數 2174 閱讀 1369

日期:20170926

生成器內有乙個方法send,可再次傳入乙個值。

上面那句可能聽不懂,但是不要緊,我們先來看看**,

#!/usr/bin/python3

defmygenerator

(): value=yield

1yield value

return done

gen=mygenerator()

print(next(gen))

print(gen.send("i am value"))

**分析,

在mygenerator裡,我們一共用了兩次yield。

比較奇怪的是第乙個yield的語句,value=yield 1。如果沒看過這一語句的,肯定不知道next回到yield後,其實是有乙個值的。

到這,我們先不急,執行**先

[penx@ali01 python]$ ./gen_send.py 

1i am value

[penx@ali01 python]$

執行過程,

用next啟動了生成器gen,知道到yield 1時返回1。

然後我們再用gen的內部方法send進入gen,而且還帶回來乙個值「i am value」。這時候,繼續執行yield 1後的**「value=」,把帶回來的值「i am value」賦給value。直到遇到yield value,把value返回。

其實,send和next的執行很像,只是send可以和生成器互動,傳入乙個值。

大家有沒有想過,如果生成器還沒啟動過,就用send,會怎樣?我們來試一下。

**,

#!/usr/bin/python3

defmygenerator

(): value=yield

1yield value

return done

gen=mygenerator()

print(gen.send(3))

執行,

[penx@ali01 python]$ ./gen_send.py 

traceback (most recent call last):

file

"./test.py", line 9, in

print(gen.send(3))

typeerror

: can't send non-none value to a just-started generator

[penx@ali01 python]$

結果,

報錯,

typeerror: can』t send non-none value to a just-started generator

說生成器剛啟動時,不能send乙個不為none的值。

小結,

所以呢,我們在用生成器時,第一次要用next啟動

其實上面報錯已經說了,can』t send non-none value。

所以啊,我們可以用send(none)來啟動生成器。

**,

#!/usr/bin/python3

defmygenerator

(): value=yield

1yield value

return done

gen=mygenerator()

print(gen.send(none))

print(gen.send(3))

執行,

[penx@ali01 python]$ ./gen_send.py 13

[penx@ali01 python]$

結果,

正常執行。

python 生成器方法

生成器支援close 方法,throw 方法,send 方法 1.close 方法 呼叫不用引數,手動關閉生成器函式,後面的呼叫會直接返回stopiteration異常。def g4 yield 1yield 2yield 3g g4 print g.next 1 g.close print g.n...

Python筆記 生成器

日期 20170925 python中有乙個很有趣的東東,叫生成器。我們先來看看簡單的 1,usr bin python3 defmygenerator for n in range 1,4 yield n return done print mygenerator print num mygene...

python生成器筆記

生成器 自動實現了迭代器協議 物件必須提供乙個next方法,執行改方法要麼返回迭代中的下一項,要麼就引起乙個stopiteration的異常,以終止迭代 只能往後走不能往前進 第一種形式 idter i for i in range 10 idter為乙個生成器,有next 方法,idter.nex...