Python生成器以及应用实例解析


Posted in Python onFebruary 08, 2018

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

一、定义

可以理解为一种数据类型,这种数据类型自动实现了迭代器协议(其他的数据类型需要调用自己内置的__iter__方法),所以生成器就是可迭代对象

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

1.生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

yield的功能:

  1. 把函数的结果做生迭代器(以一种优雅的方式封装好__iter__,__next__)
  2. 函数暂停与再继续运行的状态是由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.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

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生成器以及应用实例解析的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
35个Python编程小技巧
Apr 01 Python
Python中使用copy模块实现列表(list)拷贝
Apr 14 Python
使用Python生成url短链接的方法
May 04 Python
深入理解python多进程编程
Jun 12 Python
Anaconda入门使用总结
Apr 05 Python
Python 访问限制 private public的详细介绍
Oct 16 Python
用django-allauth实现第三方登录的示例代码
Jun 24 Python
python3.5 cv2 获取视频特定帧生成jpg图片
Aug 28 Python
Python 可变类型和不可变类型及引用过程解析
Sep 27 Python
python数据爬下来保存的位置
Feb 17 Python
python实现人脸签到系统
Apr 13 Python
浅析python字符串前加r、f、u、l 的区别
Jan 24 Python
代码分析Python地图坐标转换
Feb 08 #Python
python爬虫中get和post方法介绍以及cookie作用
Feb 08 #Python
Python OpenCV 直方图的计算与显示的方法示例
Feb 08 #Python
python OpenCV学习笔记之绘制直方图的方法
Feb 08 #Python
Python列表推导式与生成器表达式用法示例
Feb 08 #Python
详解python OpenCV学习笔记之直方图均衡化
Feb 08 #Python
python OpenCV学习笔记实现二维直方图
Feb 08 #Python
You might like
有关 PHP 和 MySQL 时区的一点总结
2008/03/26 PHP
php中并发读写文件冲突的解决方案
2013/10/25 PHP
CodeIgniter连贯操作的底层原理分析
2016/05/17 PHP
PHP rmdir()函数的用法总结
2019/07/02 PHP
PHP二维数组分页2种实现方法解析
2020/07/09 PHP
jQuery的实现原理的模拟代码 -3 事件处理
2010/08/03 Javascript
js中的push和join方法使用介绍
2013/10/08 Javascript
让JavaScript中setTimeout支持链式操作的方法
2015/06/19 Javascript
javascript控制图片播放的实现代码
2020/07/29 Javascript
AngularJS Module方法详解
2015/12/08 Javascript
快速学习AngularJs HTTP响应拦截器
2015/12/31 Javascript
js实现有过渡渐变效果的图片轮播相册(兼容IE,ff)
2016/01/19 Javascript
jQuery Ajax前后端使用JSON进行交互示例
2017/03/17 Javascript
vue学习之mintui picker选择器实现省市二级联动示例
2017/10/12 Javascript
Node绑定全局TraceID的实现方法
2019/11/14 Javascript
vue项目中使用vue-layer弹框插件的方法
2020/03/11 Javascript
JavaScript装箱及拆箱boxing及unBoxing用法解析
2020/06/15 Javascript
nginx配置域名后的二级目录访问不同项目的配置操作
2020/11/06 Javascript
[01:02:48]2018DOTA2亚洲邀请赛 4.1 小组赛 A组 LGD vs OG
2018/04/02 DOTA
使用Python抓取模板之家的CSS模板
2015/03/16 Python
python通过post提交数据的方法
2015/05/06 Python
利用python程序帮大家清理windows垃圾
2017/01/15 Python
python实现贪吃蛇游戏
2020/03/21 Python
python+mysql实现教务管理系统
2019/02/20 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
python 实现按对象传值
2019/12/26 Python
Python函数参数定义及传递方式解析
2020/06/10 Python
基于Python中Remove函数的用法讨论
2020/12/11 Python
利用CSS3实现圆角的outline效果的教程
2015/06/05 HTML / CSS
德国鞋子网上商店:Omoda.de
2017/03/31 全球购物
Sarenza德国:法国最大的时尚鞋和包包网上商店
2019/06/08 全球购物
体育教师自荐信范文
2013/12/16 职场文书
医院门卫岗位职责
2013/12/30 职场文书
小区消防演习方案
2014/02/21 职场文书
公司承诺书怎么写
2014/05/24 职场文书
九华山导游词
2015/02/03 职场文书