day19 生成器函数
生成器總結(jié):
語(yǔ)法上和函數(shù)類似:生成器函數(shù)和常規(guī)函數(shù)幾乎是一樣的。它們都是使用def語(yǔ)句進(jìn)行定義,差別在于,生成器使用yield語(yǔ)句返回一個(gè)值,而常規(guī)函數(shù)使用return語(yǔ)句返回一個(gè)值。
自動(dòng)實(shí)現(xiàn)迭代器協(xié)議:對(duì)于生成器,Python會(huì)自動(dòng)實(shí)現(xiàn)迭代器協(xié)議,以便應(yīng)用到迭代背景中,(如for循環(huán),sum函數(shù))。由于生成器自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議,所以,我們可以調(diào)用它的next方法,并且,在沒有值可以返回的時(shí)候,生成器自動(dòng)產(chǎn)生StopIteration異常
狀態(tài)掛起:生成器使用yield語(yǔ)句返回一個(gè)值。yield語(yǔ)句掛起該生成器函數(shù)的狀態(tài),保留足夠的信息,以便之后從它離開的地方繼續(xù)執(zhí)行
優(yōu)點(diǎn)一:生成器的好處是延遲計(jì)算,一次返回一個(gè)結(jié)果。也就是說,它不會(huì)一次生成所有的結(jié)果。這對(duì)于大數(shù)據(jù)量處理,將非常有用。
#列表解析 print(sum([i for i in range(100)]))#占用內(nèi)存大,機(jī)器容易卡死 #生成器表達(dá)式 print(sum(i for i in range(100)))#幾乎不占內(nèi)存 def xiadan():for i in range(10000):yield '雞蛋%s'%i # alex_lmj = xiadan() for jidan in alex_lmj:print(jidan)優(yōu)點(diǎn)二:
生成器還能有效提高代碼可讀性
def xiadan():ret=[] for i in range(100):ret.append('雞蛋%s'%i)return retdef xiadan():for i in range(10000):yield '雞蛋%s'%i總結(jié)
以上是生活随笔為你收集整理的day19 生成器函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: day18 迭代器
- 下一篇: day20 函数闭包与装饰器