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