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 相关文章推荐
Python通过解析网页实现看报程序的方法
Aug 04 Python
python 判断是否为正小数和正整数的实例
Jul 23 Python
Java编程迭代地删除文件夹及其下的所有文件实例
Feb 10 Python
多个应用共存的Django配置方法
May 30 Python
使用NumPy和pandas对CSV文件进行写操作的实例
Jun 14 Python
Windows 8.1 64bit下搭建 Scrapy 0.22 环境
Nov 18 Python
tensorflow入门:TFRecordDataset变长数据的batch读取详解
Jan 20 Python
浅谈django 模型类使用save()方法的好处与注意事项
Mar 28 Python
python下对hsv颜色空间进行量化操作
Jun 04 Python
python代码能做成软件吗
Jul 24 Python
python openssl模块安装及用法
Dec 06 Python
python中 .npy文件的读写操作实例
Apr 14 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
让你同时上传 1000 个文件 (一)
2006/10/09 PHP
php 日期时间处理函数小结
2009/12/18 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
php提示Warning:mysql_fetch_array() expects的解决方法
2014/12/16 PHP
php定义参数数量可变的函数用法实例
2015/03/16 PHP
JavaScript中使用typeof运算符需要注意的几个坑
2014/11/08 Javascript
JavaScript+html5 canvas制作的圆中圆效果实例
2016/01/27 Javascript
js实现点击图片自动提交action的简单方法
2016/10/16 Javascript
使用BootStrap实现表格隔行变色及hover变色并在需要时出现滚动条
2017/01/04 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
搭建简单的nodejs http服务器详解
2017/03/09 NodeJs
Vue中封装input组件的实例详解
2017/10/17 Javascript
vue配置请求本地json数据的方法
2018/04/11 Javascript
bootstrap中日历范围选择插件daterangepicker的使用详解
2018/04/17 Javascript
JavaScript中 ES6变量的结构赋值
2018/07/10 Javascript
JS中判断字符串存在和非空的方法
2018/09/12 Javascript
微信小程序自定义单项选择器样式
2019/07/25 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
jQuery实现手风琴效果(蒙版)
2020/01/11 jQuery
node.js中stream流中可读流和可写流的实现与使用方法实例分析
2020/02/13 Javascript
详解在Vue.js编写更好的v-for循环的6种技巧
2020/04/14 Javascript
多页vue应用的单页面打包方法(内含打包模式的应用)
2020/06/11 Javascript
JS面向对象实现飞机大战
2020/08/26 Javascript
JS访问对象两种方式区别解析
2020/08/29 Javascript
python转换字符串为摩尔斯电码的方法
2015/07/06 Python
详解duck typing鸭子类型程序设计与Python的实现示例
2016/06/03 Python
浅谈DataFrame和SparkSql取值误区
2018/06/09 Python
python装饰器常见使用方法分析
2019/06/26 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
摩飞电器俄罗斯官方网站:Morphy Richards俄罗斯
2020/07/30 全球购物
测绘工程专业求职信
2014/07/15 职场文书
2015年销售人员工作总结
2015/04/07 职场文书
公司表扬信格式
2015/05/04 职场文书
2016年百日安全生产活动总结
2016/04/06 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers