Python中怎么實(shí)現(xiàn)一個(gè)生成器函數(shù),相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
創(chuàng)新互聯(lián)主營(yíng)雁江網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,app軟件開(kāi)發(fā)公司,雁江h(huán)5重慶小程序開(kāi)發(fā)搭建,雁江網(wǎng)站營(yíng)銷推廣歡迎雁江等地區(qū)企業(yè)咨詢
在 Python 中,一邊循環(huán)一邊計(jì)算的機(jī)制,稱為生成器(Generator);
生成器是一個(gè)返回迭代器的函數(shù),只能用于迭代操作;
生成器是Python中的一個(gè)對(duì)象,對(duì)這個(gè)對(duì)象進(jìn)行操作,可以依次生產(chǎn)出按生成器內(nèi)部運(yùn)算產(chǎn)生的數(shù)據(jù);
生成器函數(shù)指的是函數(shù)體中包含yield關(guān)鍵字的函數(shù)(yield就是專門(mén)給生成器用的return);
生成器可以通過(guò)生成器表達(dá)式和生成器函數(shù)獲取到;
def add(): for i in range(10): yield i g = add() print(g) #print(next(g)) # 0 print(next(g)) # 1
我們可以通過(guò)yield關(guān)鍵字來(lái)定義一個(gè)生成器函數(shù),這個(gè)生成器函數(shù)返回值就是一個(gè)生成器對(duì)象;
def gen(): print('111111') yield '111111' print('222222') yield '222222' print('333333') yield '333333' g = gen() print(g) #next(g) # 111111 next(g) # 222222 next(g) # 333333 next(g, 'over')
生成器函數(shù)可以使用next()迭代,且每次next()只會(huì)返回一次yield的值,然后暫停,下次一次next()時(shí)會(huì)在當(dāng)前位置繼續(xù),如果沒(méi)有元素可以迭代了,還 執(zhí)在行next()則需要給定一個(gè)默認(rèn)值,不給默認(rèn)值會(huì)報(bào)錯(cuò);
如果在生成器函數(shù)中使用return,則會(huì)終止迭代,且不能得到返回值;
def gen(): print('111111') yield '111111' print('222222') return '222222' print('333333') yield '333333' g = gen() print(g) #next(g) # 111111 next(g) # 222222, 拋出異常
# 死循環(huán) def way(): i = 0 while True: i += 1 yield i c = way() print(next(c)) # 1 print(next(c)) # 2 print(next(c)) # 3 print(next(c)) # 4 print(next(c)) # 5
在生成器中使用死循環(huán),不會(huì)一直執(zhí)行,仍舊是執(zhí)行多少次next(),返回多少個(gè)值;
# 普通生成器函數(shù)way1 def way1(): for i in range(5): yield i # 帶語(yǔ)法糖的生成器函數(shù)way2 def way2(): yield from range(5) #循環(huán)輸出way1 for i in way1(): print(i) #0 1 2 3 4 #循環(huán)輸出way2 for j in way2(): print(j) #0 1 2 3 4
語(yǔ)法糖指那些沒(méi)有給計(jì)算機(jī)語(yǔ)言添加新功能,而只是對(duì)人類來(lái)說(shuō)更“甜蜜”的語(yǔ)法;
語(yǔ)法糖給程序員提供了更實(shí)用的編碼方式,有益于更好的編碼風(fēng)格,更易讀;
生成器的語(yǔ)法糖也就是生成器的一種語(yǔ)法,作用是使代碼更加簡(jiǎn)潔;
看完上述內(nèi)容,你們掌握Python中怎么實(shí)現(xiàn)一個(gè)生成器函數(shù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!