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