python生成器generator用法實(shí)例分析
本文實(shí)例講述了python生成器generator用法。分享給大家供大家參考。具體如下:
使用yield,可以讓函數(shù)生成一個(gè)結(jié)果序列,而不僅僅是一個(gè)值
例如:
def countdown(n):
print "counting down"
while n>0:
yield n #生成一個(gè)n值
n -=1
>>> c = countdown(5)
>>> c.next()
counting down
5
>>> c.next()
4
>>> c.next()
3
next()調(diào)用生成器函數(shù)一直運(yùn)行到下一條yield語句為止,此時(shí)next()將返回值傳遞給yield.而且函數(shù)將暫停中止執(zhí)行。再次調(diào)用時(shí)next()時(shí),函數(shù)將繼續(xù)執(zhí)行yield之后的語句。此過程持續(xù)執(zhí)行到函數(shù)返回為止。
通常不會像上面那樣手動(dòng)調(diào)用next(), 而是使用for循環(huán),例如:
>>> for i in countdown(5): ... print i ... counting down 5 4 3 2 1
next(), send()的返回值都是yield 后面的參數(shù), send()跟next()的區(qū)別是send()是發(fā)送一個(gè)參數(shù)給(yield n)的表達(dá)式,作為其返回值給m, 而next()是發(fā)送一個(gè)None給(yield n)表達(dá)式, 這里需要區(qū)分的是,一個(gè)是調(diào)用next(),send()時(shí)候的返回值,一個(gè)是(yield n)的返回值,兩者是不一樣的.看輸出結(jié)果可以區(qū)分。
def h(n):
while n>0:
m = (yield n)
print "m is "+str(m)
n-=1
print "n is "+str(n)
>>> p= h(5)
>>> p.next()
5
>>> p.next()
m is None
n is 4
4
>>> p.send("test")
m is test
n is 3
3
希望本文所述對大家的Python程序設(shè)計(jì)有所幫助。
相關(guān)文章
Python開發(fā)微信公眾平臺的方法詳解【基于weixin-knife】
這篇文章主要介紹了Python開發(fā)微信公眾平臺的方法,結(jié)合實(shí)例形式分析了Python基于weixin-knife針對微信公眾平臺消息、接口調(diào)用及事件處理的基本操作技巧與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-07-07
python自動(dòng)保存百度盤資源到百度盤中的實(shí)例代碼
這篇文章主要介紹了python自動(dòng)保存百度盤資源到百度盤中的實(shí)例代碼,代碼簡單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-08-08
通過python讀取txt文件和繪制柱形圖的實(shí)現(xiàn)代碼
這篇文章主要介紹了通過python讀取txt文件和繪制柱形圖的實(shí)現(xiàn)代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-03-03
golang/python實(shí)現(xiàn)歸并排序?qū)嵗a
這篇文章主要給大家介紹了關(guān)于golang/python實(shí)現(xiàn)歸并排序的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
python中Pycharm 輸出中文或打印中文亂碼現(xiàn)象的解決辦法
本篇文章主要介紹了python中Pycharm 輸出中文或打印中文亂碼現(xiàn)象的解決辦法 ,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06

