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 29 Python
Python中矩阵库Numpy基本操作详解
Nov 21 Python
windows下安装python的C扩展编译环境(解决Unable to find vcvarsall.bat)
Feb 21 Python
pandas中的DataFrame按指定顺序输出所有列的方法
Apr 10 Python
[原创]Python入门教程1. 基本运算【四则运算、变量、math模块等】
Oct 28 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
使用Python开发个京东上抢口罩的小实例(仅作技术研究学习使用)
Mar 10 Python
在Anaconda3下使用清华镜像源安装TensorFlow(CPU版)
Apr 19 Python
Python预测2020高考分数和录取情况
Jul 08 Python
Python程序慢的重要原因
Sep 04 Python
10款最佳Python开发工具推荐,每一款都是神器
Oct 15 Python
尝试使用Python爬取城市租房信息
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使用mkdir创建多级目录入门例子
2014/05/10 PHP
php注册和登录界面的实现案例(推荐)
2016/10/24 PHP
PHP  Yii清理缓存的实现方法
2016/11/10 PHP
php 生成加密公钥加密私钥实例详解
2017/06/16 PHP
jQuery 使用手册(五)
2009/09/23 Javascript
js压缩工具 yuicompressor 使用教程
2010/03/31 Javascript
jQuery 技巧小结
2010/04/02 Javascript
js中如何复制一个对象并获取其所有属性和属性对应的值
2013/10/24 Javascript
javascript实现playfair和hill密码算法
2014/12/07 Javascript
angularjs实现文字上下无缝滚动特效代码
2016/09/04 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
详解webpack 入门总结和实践(按需异步加载,css单独打包,生成多个入口文件)
2017/06/20 Javascript
jQuery开源组件BootstrapValidator使用详解
2017/06/29 jQuery
Vue自定义指令使用方法详解
2017/08/21 Javascript
Vue打包后出现一些map文件的解决方法
2018/02/13 Javascript
基于Vue 撸一个指令实现拖拽功能
2019/10/09 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Python实现简单遗传算法(SGA)
2018/01/29 Python
Python补齐字符串长度的实例
2018/11/15 Python
python实现贪吃蛇小游戏
2020/03/21 Python
python简单贪吃蛇开发
2019/01/28 Python
浅谈python常用程序算法
2019/03/22 Python
python3实现字符串操作的实例代码
2019/04/16 Python
使用python将excel数据导入数据库过程详解
2019/08/27 Python
使用Pandas的Series方法绘制图像教程
2019/12/04 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
python3 requests库实现多图片爬取教程
2019/12/18 Python
Python + opencv对拍照得到的图片进行背景去除的实现方法
2020/11/18 Python
英国女士和男士时尚服装网上购物:Top Labels Online
2018/03/25 全球购物
神路信息Java面试题目
2013/03/31 面试题
给物业的表扬信
2014/01/21 职场文书
药品业务员岗位职责
2014/04/17 职场文书
雷锋精神演讲稿
2014/05/13 职场文书
关于做家务的心得体会
2016/01/23 职场文书
MySQL脏读,幻读和不可重复读
2022/05/11 MySQL
使用JS前端技术实现静态图片局部流动效果
2022/08/05 Javascript