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)文章
基于Python實(shí)現(xiàn)Windows帶寬監(jiān)控工具
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)一個簡單的Windows帶寬監(jiān)控工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-09-09
基于高德地圖API在Python中實(shí)現(xiàn)地圖功能的方法示例詳解
本文介紹在高德開放平臺中,申請、獲取地圖API的Key的方法,同時通過簡單的Python代碼,調(diào)取API信息,對所得Key的可用性加以驗(yàn)證,感興趣的朋友一起看看吧2025-01-01
Python+Selenium鍵盤鼠標(biāo)模擬事件操作詳解
這篇文章主要帶大家一起學(xué)習(xí)一下Selenium的元素的基本操作與鼠標(biāo)鍵盤模擬事件的操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-06-06
python tkinter canvas使用實(shí)例
這篇文章主要介紹了python tkinter canvas使用實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11

