Python生成器以及應(yīng)用實例解析
本文研究的主要是Python生成器及其應(yīng)用,具體如下。
一、定義
可以理解為一種數(shù)據(jù)類型,這種數(shù)據(jù)類型自動實現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類型需要調(diào)用自己內(nèi)置的__iter__方法),所以生成器就是可迭代對象
二、生成器的兩種形式(Python有兩種不同的方式提供生成器)
1.生成器函數(shù):常規(guī)函數(shù)定義,但是,使用yield語句而不是return語句返回結(jié)果。yield語句一次返回一個結(jié)果,在每個結(jié)果中間,掛起函數(shù)的狀態(tài),以便下次重它離開的地方繼續(xù)執(zhí)行
yield的功能:
- 把函數(shù)的結(jié)果做生迭代器(以一種優(yōu)雅的方式封裝好__iter__,__next__)
- 函數(shù)暫停與再繼續(xù)運行的狀態(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)) #判斷是否為迭代器對象 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á)式:類似于列表推導(dǎo),但是,生成器返回按需產(chǎn)生結(jié)果的一個對象,而不是一次構(gòu)建一個結(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)容 #通過生成器表達(dá)器完成對文件的讀完跟操作 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)用實例解析的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!
相關(guān)文章
Python的math模塊中的常用數(shù)學(xué)函數(shù)整理
這篇文章主要介紹了Python的math模塊中的常用數(shù)學(xué)函數(shù)整理,同時對運算符的運算優(yōu)先級作了一個羅列,需要的朋友可以參考下2016-02-02Python實現(xiàn)yaml與json文件批量互轉(zhuǎn)
這篇文章主要為大家詳細(xì)介紹了如何利用Python語言實現(xiàn)yaml與json文件的批量互轉(zhuǎn),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以動手嘗試一下2022-07-07Python中MySQL數(shù)據(jù)遷移到MongoDB腳本的方法
MongoDB 是一個介于關(guān)系數(shù)據(jù)庫和非關(guān)系數(shù)據(jù)庫之間的產(chǎn)品,是非關(guān)系數(shù)據(jù)庫當(dāng)中功能最豐富,最像關(guān)系數(shù)據(jù)庫的。本文給大家介紹Python中MySQL數(shù)據(jù)遷移到MongoDB腳本的方法,需要的朋友參考下2016-04-04Pandas?DataFrame列快速轉(zhuǎn)換為列表(3秒學(xué)會!)
這篇文章主要給大家介紹了關(guān)于Pandas?DataFrame列如何快速轉(zhuǎn)換為列表的相關(guān)資料,在Python的pandas庫中可以使用DataFrame的tolist()方法將DataFrame轉(zhuǎn)化為列表,需要的朋友可以參考下2023-10-10python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫
這篇文章主要為大家詳細(xì)介紹了python遠(yuǎn)程連接服務(wù)器MySQL數(shù)據(jù)庫,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-07-07python paramiko連接ssh實現(xiàn)命令
這篇文章主要為大家介紹了python paramiko連接ssh實現(xiàn)的命令詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07