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


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 random模块(获取随机数)常用方法和使用例子
May 13 Python
Python常见格式化字符串方法小结【百分号与format方法】
Sep 18 Python
Python实现识别图片内容的方法分析
Jul 11 Python
python读取图片并修改格式与大小的方法
Jul 24 Python
python数据处理 根据颜色对图片进行分类的方法
Dec 08 Python
Python查找文件中包含中文的行方法
Dec 19 Python
初探利用Python进行图文识别(OCR)
Feb 26 Python
Python实现打砖块小游戏代码实例
May 18 Python
Pandas之Fillna填充缺失数据的方法
Jun 25 Python
python3使用print打印带颜色的字符串代码实例
Aug 22 Python
Windows 平台做 Python 开发的最佳组合(推荐)
Jul 27 Python
pycharm配置python 设置pip安装源为豆瓣源
Feb 05 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读注册表
2006/10/09 PHP
用PHP实现多级树型菜单
2006/10/09 PHP
用php简单实现加减乘除计算器
2014/01/06 PHP
php实现搜索一维数组元素并删除二维数组对应元素的方法
2015/07/06 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
PHP工厂模式简单实现方法示例
2018/05/23 PHP
PHP 计算至少是其他数字两倍的最大数的实现代码
2020/05/26 PHP
Jquery中显示隐藏的实现代码分析
2011/07/26 Javascript
优化Jquery,提升网页加载速度
2013/11/14 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
第五章之BootStrap 栅格系统
2016/04/25 Javascript
nodeJs内存泄漏问题详解
2016/09/05 NodeJs
AngularJS2 与 D3.js集成实现自定义可视化的方法
2017/12/01 Javascript
nodeJS微信分享
2017/12/20 NodeJs
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
react 中父组件与子组件双向绑定问题
2019/05/20 Javascript
vue2.0项目集成Cesium的实现方法
2019/07/30 Javascript
layui将table转化表单显示的方法(即table.render转为表单展示)
2019/09/24 Javascript
jQuery鼠标滑过横向时间轴样式(代码详解)
2019/11/01 jQuery
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
使用IPython来操作Docker容器的入门指引
2015/04/08 Python
python查看FTP是否能连接成功的方法
2015/07/30 Python
python监控文件并且发送告警邮件
2018/06/21 Python
PyQt5 QTableView设置某一列不可编辑的方法
2019/06/25 Python
python将字母转化为数字实例方法
2019/10/04 Python
中专自荐信
2013/10/13 职场文书
如何写毕业求职自荐信
2013/11/06 职场文书
十佳大学生村官事迹
2014/01/09 职场文书
小学教师管理制度
2014/01/18 职场文书
优秀员工评语
2014/02/10 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
食堂卫生管理制度
2015/08/04 职场文书
八年级作文之感恩
2019/11/22 职场文书
编写python程序的90条建议
2021/04/14 Python
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android