国产探花免费观看_亚洲丰满少妇自慰呻吟_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生成器以及應用實例解析的全部內容,希望對大家有所幫助。感興趣的朋友可以繼續參閱本站其他相關專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 抚顺市| 基隆市| 香港 | 昆明市| 常熟市| 岳阳市| 若尔盖县| 阿克苏市| 高唐县| 石林| 十堰市| 保山市| 合江县| 古浪县| 浮梁县| 定结县| 万宁市| 巴南区| 高青县| 抚松县| 余姚市| 台东市| 日喀则市| 桐庐县| 拉孜县| 榆社县| 武鸣县| 宁海县| 富民县| 鹿泉市| 东海县| 安义县| 金门县| 荔浦县| 高邮市| 唐海县| 思南县| 皮山县| 百色市| 娱乐| 元朗区|