Python生成器以及應(yīng)用實(shí)例解析
本文研究的主要是Python生成器及其應(yīng)用,具體如下。
一、定義
可以理解為一種數(shù)據(jù)類(lèi)型,這種數(shù)據(jù)類(lèi)型自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類(lèi)型需要調(diào)用自己內(nèi)置的__iter__方法),所以生成器就是可迭代對(duì)象
二、生成器的兩種形式(Python有兩種不同的方式提供生成器)
1.生成器函數(shù):常規(guī)函數(shù)定義,但是,使用yield語(yǔ)句而不是return語(yǔ)句返回結(jié)果。yield語(yǔ)句一次返回一個(gè)結(jié)果,在每個(gè)結(jié)果中間,掛起函數(shù)的狀態(tài),以便下次重它離開(kāi)的地方繼續(xù)執(zhí)行
yield的功能:
- 把函數(shù)的結(jié)果做生迭代器(以一種優(yōu)雅的方式封裝好__iter__,__next__)
- 函數(shù)暫停與再繼續(xù)運(yùn)行的狀態(tài)是由yield
def func(): print('first') yield 11111111 print('second') yield 2222222 print('third') yield 33333333 print('fourth') g=func() print(g) from collections import Iterator print(isinstance(g,Iterator)) #判斷是否為迭代器對(duì)象 print(next(g)) print('======>') print(next(g)) print('======>') print(next(g)) print('======>') print(next(g)) for i in g: #i=iter(g) print(i)
注:yield與return的比較?
- 相同:都有返回值的功能
- 不同:return只能返回一次值,而yield可以返回多次值
2.生成器表達(dá)式:類(lèi)似于列表推導(dǎo),但是,生成器返回按需產(chǎn)生結(jié)果的一個(gè)對(duì)象,而不是一次構(gòu)建一個(gè)結(jié)果列表
g=('egg%s' %i for i in range(1000)) print(g) print(next(g)) print(next(g)) print(next(g)) with open('a.txt',encoding='utf-8') as f: # res=max((len(line) for line in f)) res=max(len(line) for line in f) print(res) print(max([1,2,3,4,5,6])) with open('a.txt',encoding='utf-8') as f: g=(len(line) for line in f) print(max(g)) print(max(g)) print(max(g))
三、應(yīng)用
# [{'name': 'apple', 'price': 333, 'count': 3}, ]文件內(nèi)容 #通過(guò)生成器表達(dá)器完成對(duì)文件的讀完跟操作 with open('db.txt',encoding='utf-8') as f: info=[{'name':line.split()[0], 'price':float(line.split()[1]), 'count':int(line.split()[2])} for line in f if float(line.split()[1]) >= 30000] print(info)
總結(jié)
以上就是本文關(guān)于Python生成器以及應(yīng)用實(shí)例解析的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
Python的math模塊中的常用數(shù)學(xué)函數(shù)整理
這篇文章主要介紹了Python的math模塊中的常用數(shù)學(xué)函數(shù)整理,同時(shí)對(duì)運(yùn)算符的運(yùn)算優(yōu)先級(jí)作了一個(gè)羅列,需要的朋友可以參考下2016-02-02Python實(shí)現(xiàn)yaml與json文件批量互轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了如何利用Python語(yǔ)言實(shí)現(xiàn)yaml與json文件的批量互轉(zhuǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動(dòng)手嘗試一下2022-07-07Python中MySQL數(shù)據(jù)遷移到MongoDB腳本的方法
MongoDB 是一個(gè)介于關(guān)系數(shù)據(jù)庫(kù)和非關(guān)系數(shù)據(jù)庫(kù)之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫(kù)當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫(kù)的。本文給大家介紹Python中MySQL數(shù)據(jù)遷移到MongoDB腳本的方法,需要的朋友參考下2016-04-04Pandas?DataFrame列快速轉(zhuǎn)換為列表(3秒學(xué)會(huì)!)
這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame列如何快速轉(zhuǎn)換為列表的相關(guān)資料,在Python的pandas庫(kù)中可以使用DataFrame的tolist()方法將DataFrame轉(zhuǎn)化為列表,需要的朋友可以參考下2023-10-10Python基于OpenCV實(shí)現(xiàn)視頻的人臉檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Python基于OpenCV實(shí)現(xiàn)視頻的人臉檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫(kù)
這篇文章主要為大家詳細(xì)介紹了python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫(kù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07python paramiko連接ssh實(shí)現(xiàn)命令
這篇文章主要為大家介紹了python paramiko連接ssh實(shí)現(xiàn)的命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07python計(jì)算列表內(nèi)各元素的個(gè)數(shù)實(shí)例
今天小編就為大家分享一篇python計(jì)算列表內(nèi)各元素的個(gè)數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06