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


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中的多重继承
Apr 28 Python
django实现前后台交互实例
Aug 07 Python
python中子类调用父类函数的方法示例
Aug 18 Python
一些Centos Python 生产环境的部署命令(推荐)
May 07 Python
Jupyter notebook远程访问服务器的方法
May 24 Python
用Python实现将一张图片分成9宫格的示例
Jul 05 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
python实现处理mysql结果输出方式
Apr 09 Python
解决Jupyter NoteBook输出的图表太小看不清问题
Apr 16 Python
python和C++共享内存传输图像的示例
Oct 27 Python
基于Python的EasyGUI学习实践
May 07 Python
Python趣味实战之手把手教你实现举牌小人生成器
Jun 07 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程序中防止盗链
2008/04/09 PHP
PHP+MySQL实现无极限分类栏目的方法
2015/12/23 PHP
[原创]php求圆周率的简单实现方法
2016/05/30 PHP
javascript Math.random()随机数函数
2009/11/04 Javascript
跨浏览器开发经验总结(四) 怎么写入剪贴板
2010/05/13 Javascript
Jquery 最近浏览过的商品的功能实现代码
2010/05/14 Javascript
AngularJS实现表单验证
2015/01/28 Javascript
jquery图片切换实例分析
2015/04/15 Javascript
元素绑定click点击事件方法
2015/06/08 Javascript
angular实现form验证实例代码
2017/01/17 Javascript
ES6学习教程之块级作用域详解
2017/10/09 Javascript
nodejs实现的连接MySQL数据库功能示例
2018/01/25 NodeJs
官方推荐react-navigation的具体使用详解
2018/05/08 Javascript
Vue.js项目中管理每个页面的头部标签的两种方法
2018/06/25 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
深度定制Python的Flask框架开发环境的一些技巧总结
2016/07/12 Python
windows下python安装pip图文教程
2018/05/25 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
MAC平台基于Python Appium环境搭建过程图解
2020/08/13 Python
python 获取计算机的网卡信息
2021/02/18 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
智利最大的网上商店:Linio智利
2016/11/24 全球购物
Hashtable 添加内容的方式有哪几种,有什么区别?
2012/04/08 面试题
外包公司软件测试工程师
2014/11/01 面试题
教师求职推荐信范文
2013/11/20 职场文书
给交警的表扬信
2014/01/12 职场文书
致400米运动员广播稿
2014/02/07 职场文书
学校门卫岗位职责
2014/03/16 职场文书
学雷锋活动倡议书
2014/08/30 职场文书
缅怀先烈演讲稿
2014/09/03 职场文书
雷锋观后感
2015/06/10 职场文书
服务行业标语口号
2015/12/26 职场文书
spring cloud gateway中如何读取请求参数
2021/07/15 Java/Android