国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python生成器以及應用實例解析

2020-02-22 23:10:40
字體:
來源:轉載
供稿:網友

本文研究的主要是Python生成器及其應用,具體如下。

一、定義

可以理解為一種數據類型,這種數據類型自動實現了迭代器協議(其他的數據類型需要調用自己內置的__iter__方法),所以生成器就是可迭代對象

二、生成器的兩種形式(Python有兩種不同的方式提供生成器)

1.生成器函數:常規函數定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返回一個結果,在每個結果中間,掛起函數的狀態,以便下次重它離開的地方繼續執行

yield的功能:

    把函數的結果做生迭代器(以一種優雅的方式封裝好__iter__,__next__) 函數暫停與再繼續運行的狀態是由yield
def func():  print('first')  yield 11111111  print('second')  yield 2222222  print('third')  yield 33333333  print('fourth')g=func()print(g)from collections import Iteratorprint(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.生成器表達式:類似于列表推導,但是,生成器返回按需產生結果的一個對象,而不是一次構建一個結果列表

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))

三、應用

# [{'name': 'apple', 'price': 333, 'count': 3}, ]文件內容#通過生成器表達器完成對文件的讀完跟操作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)

總結

以上就是本文關于Python生成器以及應用實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 周宁县| 龙游县| 清水县| 焦作市| 四平市| 临漳县| 太和县| 剑川县| 东辽县| 分宜县| 曲沃县| 马关县| 玛曲县| 乡宁县| 马公市| 图木舒克市| 贵港市| 日喀则市| 景泰县| 萨嘎县| 海安县| 潼关县| 南陵县| 喀什市| 伊宁市| 泸溪县| 阜康市| 日喀则市| 阳泉市| 雷州市| 蒙自县| 呈贡县| 磐安县| 响水县| 邯郸县| 张掖市| 宁陕县| 大庆市| 新疆| 东海县| 左云县|