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读取注册表中值的方法
Apr 08 Python
Python中内置的日志模块logging用法详解
Jul 12 Python
Python学习思维导图(必看篇)
Jun 26 Python
python WindowsError的错误代码详解
Jul 23 Python
使用C++扩展Python的功能详解
Jan 12 Python
python中利用h5py模块读取h5文件中的主键方法
Jun 05 Python
Python面向对象之继承和组合用法实例分析
Aug 27 Python
PyTorch实现重写/改写Dataset并载入Dataloader
Jul 14 Python
python入门教程之基本算术运算符
Nov 13 Python
python实现经纬度采样的示例代码
Dec 10 Python
关于python中remove的一些坑小结
Jan 04 Python
Python安装使用Scrapy框架
Apr 12 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中的函数-- foreach()的用法详解
2013/06/24 PHP
Laravel 5.5 异常处理 & 错误日志的解决
2019/10/17 PHP
jquery设置元素的readonly和disabled的写法
2013/09/22 Javascript
js获取当前页面的url网址信息
2014/06/12 Javascript
跟我学习javascript的prototype,getPrototypeOf和__proto__
2015/11/17 Javascript
详解vue.js移动端导航navigationbar的封装
2017/07/05 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
2017/07/18 Javascript
knockoutjs模板实现树形结构列表
2017/07/31 Javascript
nuxt+axios解决前后端分离SSR的示例代码
2017/10/24 Javascript
angularjs实现分页和搜索功能
2018/01/03 Javascript
详解创建自定义的Angular Schematics
2018/06/06 Javascript
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
微信小程序云开发详细教程
2019/05/16 Javascript
Vue.js如何使用Socket.IO的示例代码
2019/09/05 Javascript
nuxt静态部署打包相对路径操作
2020/11/06 Javascript
[01:44]剑指西雅图 展望TI之CIS战队专访
2014/06/25 DOTA
Python中用PIL库批量给图片加上序号的教程
2015/05/06 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
python检测IP地址变化并触发事件
2018/12/26 Python
Python学习笔记之读取文件、OS模块、异常处理、with as语法示例
2019/06/04 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
python可视化篇之流式数据监控的实现
2019/08/07 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
python Pillow图像处理方法汇总
2019/10/16 Python
Python多线程Threading、子线程与守护线程实例详解
2020/03/24 Python
越南电子产品购物网站:FPT Shop
2017/12/02 全球购物
StringBuilder和String的区别
2015/05/18 面试题
电子商务专业个人的自我评价
2013/12/19 职场文书
会计专业自我评价
2014/02/12 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
2015年社区党务工作总结
2015/04/21 职场文书
2015秋季开学典礼致辞
2015/07/16 职场文书
初中英语教学反思范文
2016/02/15 职场文书
python基于tkinter制作m3u8视频下载工具
2021/04/24 Python
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android