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中的choice()方法使用详解
May 15 Python
Python爬虫天气预报实例详解(小白入门)
Jan 24 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Python实现的多叉树寻找最短路径算法示例
Jul 30 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
详解Python3 pickle模块用法
Sep 16 Python
python实现树的深度优先遍历与广度优先遍历详解
Oct 26 Python
Scrapy框架实现的登录网站操作示例
Feb 06 Python
python中for in的用法详解
Apr 17 Python
python_matplotlib改变横坐标和纵坐标上的刻度(ticks)方式
May 16 Python
Pandas实现一列数据分隔为两列
May 18 Python
python利用opencv实现颜色检测
Feb 23 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上传文件的增强函数
2010/07/21 PHP
ThinkPHP之R方法实例详解
2014/06/20 PHP
PHP判断一个字符串是否是回文字符串的方法
2015/03/23 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
解决css和js的{}与smarty定界符冲突问题的两种方法
2013/09/10 Javascript
JQuery触发事件例如click
2013/09/11 Javascript
当鼠标移动时出现特效的JQuery代码
2013/11/08 Javascript
jQuery实现鼠标经过弹出提示信息的地图热点效果
2015/08/07 Javascript
jquery+php随机生成红包金额数量代码分享
2015/08/27 Javascript
jQuery自动完成插件completer附源码下载
2016/01/04 Javascript
Javascript打印局部页面实例
2016/06/21 Javascript
Javascript中apply、call、bind的巧妙使用
2016/08/18 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
浅谈jQuery操作类数组的工具方法
2016/12/23 Javascript
JavaScript之浏览器对象_动力节点Java学院整理
2017/07/03 Javascript
关于JavaScript中forEach和each用法浅析
2017/07/27 Javascript
js 判断一个数字是不是2的n次方幂的实例
2017/11/26 Javascript
JavaScript变量提升和严格模式实例分析
2019/01/27 Javascript
javascript实现弹幕墙效果
2019/11/28 Javascript
基于vue--key值的特殊用处详解
2020/07/31 Javascript
讲解Python中的标识运算符
2015/05/14 Python
python图像处理之反色实现方法
2015/05/30 Python
python获取指定字符串中重复模式最高的字符串方法
2018/06/29 Python
解决pycharm运行时interpreter为空的问题
2018/10/29 Python
使用python无账号无限制获取企查查信息的实例代码
2020/04/17 Python
python 19个值得学习的编程技巧
2020/08/15 Python
python 实现表情识别
2020/11/21 Python
切尔西足球俱乐部官方网上商店:Chelsea FC
2019/06/17 全球购物
财务管理专业应届毕业生求职信
2013/09/22 职场文书
学校安全生产月活动总结
2014/07/05 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书
会议开幕致辞怎么写
2016/03/03 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
Prometheus 监控MySQL使用grafana展示
2021/08/30 MySQL
分析SQL窗口函数之取值窗口函数
2022/04/21 Oracle
详解如何使用Nginx解决跨域问题
2022/05/06 Servers