用生成器来改写直接返回列表的函数方法


Posted in Python onMay 25, 2017

本文是一篇关于《Effective Python》书中一节的学习笔记,记录了示例代码和思路。

如果函数要产生一系列结果,那么最简单的做法就是把这些结果都放在一个列表里返回。

比如我们要查出字符串中每个词的首字母在整串字符串中的位置:

def index_word(text):
  result=[]
  if text:
    result.append(0)
  for index,letter in enumerate(text):
    if letter == ' ':
      result.append(index+1)
  return result

该函数的使用:

用生成器来改写直接返回列表的函数方法

这个函数思路很明了,但存在的问题在于代码拥挤、冗余。返回前要把所有结果都放在列表里,如果输入量巨大,则程序可能会耗尽内存发生崩溃。

这个函数改用生成器(generator)来写会更好。可以对应任意长度的数据,不会影响到执行时所耗内存。

生成器是使用yield表达式的函数。调用生成器函数时,它并不会真的运行,而是会返回迭代器。每次在这个迭代器上面调用内置的next函数时,迭代器会把生成器推进到下一个yield表达式那里。生成器传给yield的每一个值,都会由迭代器返回给调用者。

def index_word_iter(text):
  if text:
    yield 0
  for index,letter in enumerate(text):
    if letter == ' ':
      yield index+1

用生成器来改写直接返回列表的函数方法

需要注意的是:函数返回的迭代器,只能产生一轮结果,如果继续迭代第二轮,是不会再有结果的。

以上这篇用生成器来改写直接返回列表的函数方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python使用SocketServer模块编写基本服务器程序的教程
Jul 12 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
Python探索之Metaclass初步了解
Oct 28 Python
Python使用Turtle模块绘制五星红旗代码示例
Dec 11 Python
java判断三位数的实例讲解
Jun 10 Python
python使用Pandas库提升项目的运行速度过程详解
Jul 12 Python
Python测试模块doctest使用解析
Aug 10 Python
Python configparser模块常用方法解析
May 22 Python
在pycharm中debug 实时查看数据操作(交互式)
Jun 09 Python
Python环境使用OpenCV检测人脸实现教程
Oct 19 Python
Python获取android设备cpu和内存占用情况
Nov 15 Python
Keras保存模型并载入模型继续训练的实现
Feb 20 Python
Python随机读取文件实现实例
May 25 #Python
利用Anaconda完美解决Python 2与python 3的共存问题
May 25 #Python
Python实现的简单dns查询功能示例
May 24 #Python
Python向日志输出中添加上下文信息
May 24 #Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
May 24 #Python
Python简单生成8位随机密码的方法
May 24 #Python
python中利用xml.dom模块解析xml的方法教程
May 24 #Python
You might like
php时间戳格式化显示友好的时间函数分享
2014/10/21 PHP
golang与php实现计算两个经纬度之间距离的方法
2016/07/22 PHP
Linux服务器下PHPMailer发送邮件失败的问题解决
2017/03/04 PHP
JavaScript触发器详解
2007/03/10 Javascript
jQuery数据缓存功能的实现思路及简单模拟
2013/05/27 Javascript
JS/Jquery判断对象为空的方法
2015/06/11 Javascript
js判断日期时间有效性的方法
2015/10/24 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
Node.js操作Firebird数据库教程
2016/03/04 Javascript
深入理解$.each和$(selector).each
2016/05/15 Javascript
JQuery 传送中文乱码问题的简单解决办法
2016/05/24 Javascript
JS实现随机颜色的3种方法与颜色格式的转化
2017/01/05 Javascript
JavaScript 函数节流详解及方法总结
2017/02/09 Javascript
JavaScript canvas实现围绕旋转动画
2017/11/18 Javascript
小程序中英文混合排序问题解决
2019/08/02 Javascript
jquery实现垂直手风琴导航栏
2020/02/18 jQuery
微信小程序vant弹窗组件的实现方式
2020/02/21 Javascript
js实现简易拖拽的示例
2020/10/26 Javascript
Python使用xlrd读取Excel格式文件的方法
2015/03/10 Python
Python中的urllib模块使用详解
2015/07/07 Python
使用requests库制作Python爬虫
2018/03/25 Python
Python使用pandas处理CSV文件的实例讲解
2018/06/22 Python
python 执行文件时额外参数获取的实例
2018/12/18 Python
python迭代器常见用法实例分析
2019/11/22 Python
Python实现大数据收集至excel的思路详解
2020/01/03 Python
Python自动采集微信联系人的实现示例
2020/02/28 Python
keras 解决加载lstm+crf模型出错的问题
2020/06/10 Python
纯CSS3实现给头像加个光芒四射且旋转的背景动画效果
2014/05/07 HTML / CSS
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
杭州时比特电子有限公司SQL
2013/08/22 面试题
九年级科学教学反思
2014/01/29 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
2014年村支部书记四风对照检查材料思想汇报
2014/10/02 职场文书
员工年终考核评语
2014/12/31 职场文书
离婚纠纷代理词
2015/05/23 职场文书
电影红河谷观后感
2015/06/11 职场文书