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


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 正则表达式操作指南
May 04 Python
python发布模块的步骤分享
Feb 21 Python
python控制台英汉汉英电子词典
Apr 23 Python
python中的__slots__使用示例
Feb 26 Python
Python用list或dict字段模式读取文件的方法
Jan 10 Python
matplotlib设置legend图例代码示例
Dec 19 Python
python实现log日志的示例代码
Apr 28 Python
python opencv判断图像是否为空的实例
Jan 26 Python
Python 隐藏输入密码时屏幕回显的实例
Feb 19 Python
PyQt5 对图片进行缩放的实例
Jun 18 Python
使用pyinstaller打包PyQt4程序遇到的问题及解决方法
Jun 24 Python
使用Bazel编译TensorBoard教程
Feb 15 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
destoon实现调用图文新闻的方法
2014/08/21 PHP
php 伪造ip以及url来路信息方法汇总
2014/11/25 PHP
php实现的递归提成方案实例
2015/11/14 PHP
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
js控制再次点击按钮之间的间隔时间可防止重复提交
2014/08/01 Javascript
javascript手工制作悬浮菜单
2015/02/12 Javascript
JavaScript使用Max函数返回两个数字中较大数的方法
2015/04/06 Javascript
jQuery仿淘宝网产品品牌隐藏与显示效果
2015/09/01 Javascript
JavaScript如何实现组合列表框中元素移动效果
2016/03/01 Javascript
js 判断一组日期是否是连续的简单实例
2016/07/11 Javascript
jQuery调用Webservice传递json数组的方法
2016/08/06 Javascript
基于Bootstrap和jQuery构建前端分页工具实例代码
2016/11/23 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
vue中使用WX-JSSDK的两种方法(推荐)
2020/01/18 Javascript
小程序瀑布流组件实现翻页与图片懒加载
2020/05/19 Javascript
全面了解python字符串和字典
2016/07/07 Python
python pygame实现方向键控制小球
2019/05/17 Python
Python count函数使用方法实例解析
2020/03/23 Python
Python实现Keras搭建神经网络训练分类模型教程
2020/06/12 Python
python+selenium自动化实战携带cookies模拟登陆微博
2021/01/19 Python
用Python制作音乐海报
2021/01/26 Python
利用HTML5的新特点实现图片文件异步上传
2014/05/29 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
澳洲的服装老品牌:SABA
2018/02/06 全球购物
酒店门卫岗位职责
2013/12/29 职场文书
大学生职业生涯规划书模板
2014/01/03 职场文书
宠物店的创业计划书范文
2014/01/11 职场文书
硕士生工作推荐信
2014/03/07 职场文书
销售会计岗位职责
2014/03/15 职场文书
横幅标语大全
2014/06/17 职场文书
以幸福为主题的活动方案
2014/08/22 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
新娘父亲婚礼致辞
2015/07/27 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书
oracle DGMGRL ORA-16603报错的解决方法(DG Broker)
2021/04/06 Oracle
浅谈Redis 中的过期删除策略和内存淘汰机制
2022/04/03 Redis