python之yield和return的對(duì)比分析
python yield和return的對(duì)比
- 相同點(diǎn):都是返回函數(shù)執(zhí)行的結(jié)果
- 不同點(diǎn):return 在返回結(jié)果后結(jié)束函數(shù)的運(yùn)行,而yield 則是讓函數(shù)變成一個(gè)生成器,生成器每次產(chǎn)生一個(gè)值(yield語(yǔ)句),函數(shù)被凍結(jié),被喚醒后再產(chǎn)生一個(gè)值
例子:求一組數(shù)的平方值
return 實(shí)現(xiàn):
def squre(n): ? ? ls = [i*i for i in range(n)] ? ? return ls for i in squre(5): ? ? print(i, end=' ?')
結(jié)果為:
0 1 4 9 16
yield 實(shí)現(xiàn):
def squre(n): ? ? for i in range(n): ? ? ? ? yield i*i for i in squre(5): ? ? print(i, end=' ?')
結(jié)果為:
0 1 4 9 16
yield 生成器相比 return一次返回所有結(jié)果的優(yōu)勢(shì):
(1)反應(yīng)更迅速
(2)更節(jié)省空間
(3)使用更靈活
python3中函數(shù)里的return和yield共存時(shí)的細(xì)節(jié)
在python3中,生成器的創(chuàng)建方式有兩種:
利用列表生成式和函數(shù)中添加yield
在這需要注意的是,當(dāng)采集函數(shù)創(chuàng)建生成器時(shí),如果函數(shù)中含有return,則不會(huì)通過(guò)return得到任憑結(jié)果,return中止當(dāng)前生成器,如果執(zhí)行next()會(huì)報(bào)錯(cuò)。
def f1(): ? ? for i in range(10): ? ? ? ? print(i) ? ? ? ? i +=1 ? ? ? ? yield i ? ? ? ? return i f = f1() next(f) next(f) next(f) next(f)
函數(shù)有了yield后,函數(shù)名加()得到一個(gè)生成器。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
手把手教你快速安裝gpu版本的pytorch(詳細(xì)圖文教程)
在Windows?10上安裝PyTorch時(shí),通常默認(rèn)安裝的是CPU版本,且下載速度較慢,本文提供了一個(gè)詳細(xì)的安裝指南,包括如何檢查CUDA版本、選擇合適的PyTorch、torchvision和torchaudio版本,并通過(guò)pip而非conda進(jìn)行安裝,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09對(duì)Python正則匹配IP、Url、Mail的方法詳解
今天小編就為大家分享一篇對(duì)Python正則匹配IP、Url、Mail的方法詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python要求O(n)復(fù)雜度求無(wú)序列表中第K的大元素實(shí)例
這篇文章主要介紹了Python要求O(n)復(fù)雜度求無(wú)序列表中第K的大元素實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04python執(zhí)行l(wèi)inux系統(tǒng)命令的三種方式小結(jié)
本文介紹三種在python執(zhí)行l(wèi)inux命令的方式,三種方式都是基于python的標(biāo)準(zhǔn)庫(kù)實(shí)現(xiàn),因此不需要額外安裝第三方庫(kù),具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-02