轉(zhuǎn)帖|使用教程|編輯:黃竹雯|2019-04-12 13:41:39.000|閱讀 380 次
概述:可能會(huì)有程序猿剛開(kāi)始接觸Python的時(shí)候感覺(jué)很清爽,入門很簡(jiǎn)單,但后邊學(xué)到生成器和協(xié)程的時(shí)候就感覺(jué)有些吃力了。本文主要與大家分享什么是生成器以及生成器表達(dá)式。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
可能會(huì)有程序猿剛開(kāi)始接觸Python的時(shí)候感覺(jué)很清爽,入門很簡(jiǎn)單,但后邊學(xué)到生成器和協(xié)程的時(shí)候就感覺(jué)有些吃力了。本文主要與大家分享什么是生成器以及生成器表達(dá)式。
書(shū)上說(shuō):函數(shù)使用yield可以定義生成器對(duì)象,那么包含yield的函數(shù)主是一個(gè)生成器函數(shù),它可以生成一個(gè)序列,方便迭代中使用,__next__()#python3中的特殊方法,應(yīng)該避免使用特殊方法,next(c)使用內(nèi)置函數(shù)next()即可。
def countdown(n): print("Counting down from %s" % n) while n > 0: yield n n -= 1 return c = countdown(10) print(c.__next__())#python3中的特殊方法,應(yīng)該避免使用特殊方法 print(next(c))#使用內(nèi)置函數(shù)next() for i in c : print(i,end=' ')
函數(shù)對(duì)象調(diào)用.__next__()函數(shù)時(shí)開(kāi)始執(zhí)行語(yǔ)句,遇到y(tǒng)ield語(yǔ)句時(shí)停止。可以使用循環(huán)來(lái)操作生成器。 調(diào)用close()方法關(guān)閉未使用完的生成器。 那么問(wèn)題來(lái)了,yield到底是什么?
我們把上邊的代碼稍加變化:
def countdown1(n): print("Counting down from %s" % n) while n > 0: yield n*n n -= 1 return c = countdown1(10) print(next(c)) print(next(c)) print(next(c)) for i in c : print(i,end=' ')
運(yùn)行之后我們可以發(fā)現(xiàn)程序運(yùn)行到y(tǒng)ield的時(shí)候返回了一個(gè)值,那么yield和return在功能上有些相似。
如果你對(duì)列表推導(dǎo)有些了解,你會(huì)發(fā)現(xiàn),生成器表達(dá)式只不過(guò)是把列表的[]換成了元組的(),但列表推導(dǎo)返回的是一個(gè)結(jié)果集,而生成器表達(dá)式返回的是一個(gè)生成器。 因?yàn)檫@個(gè)特點(diǎn),我們可以通過(guò)流方式訪問(wèn)一個(gè)巨大的文件而不必把它直接加載到內(nèi)存,這樣很大的提高了程序的性能。
代碼如下:
print('') print("生成器表達(dá)式:") b = (x*x for x in range(10) if (x % 2 ==0)) print(next(b)) print(next(b)) for i in b : print(i, end=' ')
【專業(yè)Python IDE推薦】——PyCharm (正版低至¥1068):
PyCharm 是一款Python IDE,其帶有一整套可以幫助用戶在使用Python語(yǔ)言開(kāi)發(fā)時(shí)提高其效率的工具。此外,該IDE提供了一些高級(jí)功能,以用于Django框架下的專業(yè)Web開(kāi)發(fā)。
PyCharm基礎(chǔ)教程推薦:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn