Python生成器next方法和send方法區(qū)別詳解
yield的語法規(guī)則是:
在yield這里暫停函數(shù)執(zhí)行,并返回yield后面表達(dá)式的值(默認(rèn)為None),直到被next()再次調(diào)用時(shí),從上次暫停的yield代碼處繼續(xù)往下執(zhí)行。當(dāng)沒有可繼續(xù)next()時(shí),拋出異常,該異??杀籪or循環(huán)處理。
def fib(n):
def fib(n):
a, b = 0, 1
i = 0
while i < n:
yield b
a, b = b, a+b
i += 1
if __name__ == '__main__':
f = fib(10)
for item in f:
print(item)
python中,含有yield關(guān)鍵字的對(duì)象就是一個(gè)生成器,每次調(diào)用next方法時(shí)會(huì)執(zhí)行到y(tǒng)ield后面的語句,然后返回yield后面代碼塊的執(zhí)行結(jié)果
def foo():
bar_a = yield 1 # bar_a是語句塊(yield 1)的返回值,默認(rèn)為None
bar_b = yield bar_a
yield "最后一個(gè)值,再迭代就要報(bào)StopIteration了"
f = foo() # 創(chuàng)建生成器,此時(shí)沒有執(zhí)行foo()里的任何語句
print(next(f)) # 從foo()里進(jìn)入,一直執(zhí)行到(yield 1)處,此時(shí)變量bar_a還沒有創(chuàng)建
print(next(f)) # 先將語句塊(yield 1)的返回值賦值個(gè)bar_a,此時(shí)bar_a的值是None。
# 然后執(zhí)行到語句塊(yield bar_a),bar_b也還沒有被創(chuàng)建
print(next(f)
>>>1
>>>None
>>>最后一個(gè)值,再迭代就要報(bào)StopIteration了
send()
def foo():
bar_a = yield 1
bar_b = yield bar_a
yield "最后一個(gè)值,再迭代就要報(bào)StopIteration了"
f = foo()
print(f.send(None)) # 和next(f)的效果一模一樣
print(f.send("my lover")) # 覆蓋yield 1語句的返回值
print(next(f))
>>>1
>>>my lover
>>>最后一個(gè)值,再迭代就要報(bào)StopIteration了
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python face_recognition實(shí)現(xiàn)AI識(shí)別圖片中的人物
最近碰到了照片識(shí)別的場(chǎng)景,正好使用了face_recognition項(xiàng)目,給大家分享分享。face_recognition項(xiàng)目能做的很多,人臉檢測(cè)功能也是有的,是一個(gè)比較成熟的項(xiàng)目。感興趣的可以了解一下2022-01-01
Python fire模塊(最簡(jiǎn)化命令行生成工具)的使用教程詳解
Python Fire是谷歌開源的一個(gè)第三方庫,用于從任何Python對(duì)象自動(dòng)生成命令行接口(CLI),可用于如快速拓展成命令行等形式。本文將通過實(shí)例為大家詳細(xì)說說fire模塊的使用,感興趣的可以了解一下2022-10-10
torch.optim優(yōu)化算法理解之optim.Adam()解讀
這篇文章主要介紹了torch.optim優(yōu)化算法理解之optim.Adam()解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
使用 Celery Once 來防止 Celery 重復(fù)執(zhí)行同一個(gè)任務(wù)
這篇文章主要介紹了使用 Celery Once 來防止 Celery 重復(fù)執(zhí)行同一個(gè)任務(wù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-10-10
基于Python編寫一個(gè)簡(jiǎn)單的端口掃描器
端口掃描是非常實(shí)用的,不止用在信息安全方面,日常的運(yùn)維也用得到。本文將利用Python編寫一個(gè)簡(jiǎn)單的端口掃描器,需要的可以參考一下2022-04-04
Python?Pygame繪制直線實(shí)現(xiàn)光線反射效果
這篇文章主要為大家詳細(xì)介紹了如何利用Python?Pygame繪制直線以實(shí)現(xiàn)光線反射效果,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-11-11
基于Python編寫一個(gè)點(diǎn)名器的示例代碼
想起小學(xué)的時(shí)候老師想點(diǎn)名找小伙伴回答問題的時(shí)候,老師竟斥巨資買了個(gè)點(diǎn)名器。今日無聊便敲了敲小時(shí)候老師斥巨資買的點(diǎn)名器,希望對(duì)大家有幫助2022-07-07
讓python json encode datetime類型
python2.6+ 自帶的json模塊,不支持datetime的json encode,每次都需要手動(dòng)轉(zhuǎn)為字符串,很累人,我們可以自己封裝一個(gè)簡(jiǎn)單的方法處理此問題。2010-12-12
Python字典推導(dǎo)式將cookie字符串轉(zhuǎn)化為字典解析
這篇文章主要介紹了Python字典推導(dǎo)式將cookie字符串轉(zhuǎn)化為字典解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08

