轉(zhuǎn)帖|使用教程|編輯:黃竹雯|2019-04-12 13:41:39.000|閱讀 391 次
概述:可能會有程序猿剛開始接觸Python的時候感覺很清爽,入門很簡單,但后邊學(xué)到生成器和協(xié)程的時候就感覺有些吃力了。本文主要與大家分享什么是生成器以及生成器表達式。
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
可能會有程序猿剛開始接觸Python的時候感覺很清爽,入門很簡單,但后邊學(xué)到生成器和協(xié)程的時候就感覺有些吃力了。本文主要與大家分享什么是生成器以及生成器表達式。
書上說:函數(shù)使用yield可以定義生成器對象,那么包含yield的函數(shù)主是一個生成器函數(shù),它可以生成一個序列,方便迭代中使用,__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ù)對象調(diào)用.__next__()函數(shù)時開始執(zhí)行語句,遇到y(tǒng)ield語句時停止。可以使用循環(huán)來操作生成器。 調(diào)用close()方法關(guān)閉未使用完的生成器。 那么問題來了,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=' ')
運行之后我們可以發(fā)現(xiàn)程序運行到y(tǒng)ield的時候返回了一個值,那么yield和return在功能上有些相似。
如果你對列表推導(dǎo)有些了解,你會發(fā)現(xiàn),生成器表達式只不過是把列表的[]換成了元組的(),但列表推導(dǎo)返回的是一個結(jié)果集,而生成器表達式返回的是一個生成器。 因為這個特點,我們可以通過流方式訪問一個巨大的文件而不必把它直接加載到內(nèi)存,這樣很大的提高了程序的性能。
代碼如下:
print('') print("生成器表達式:") 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語言開發(fā)時提高其效率的工具。此外,該IDE提供了一些高級功能,以用于Django框架下的專業(yè)Web開發(fā)。
PyCharm基礎(chǔ)教程推薦:
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@ke049m.cn