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


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 相关文章推荐
easy_install python包安装管理工具介绍
Feb 10 Python
使用python实现生成用户信息
Mar 20 Python
Python数据分析之双色球基于线性回归算法预测下期中奖结果示例
Feb 08 Python
python中yaml配置文件模块的使用详解
Apr 27 Python
python的time模块和datetime模块实例解析
Nov 29 Python
python中设置超时跳过,超时退出的方式
Dec 13 Python
浅析pip安装第三方库及pycharm中导入第三方库的问题
Mar 10 Python
解决Django提交表单报错:CSRF token missing or incorrect的问题
Mar 13 Python
Python装饰器实现方法及应用场景详解
Mar 26 Python
Python decimal模块使用方法详解
Jun 08 Python
python绘制箱型图
Apr 27 Python
python3.9之你应该知道的新特性详解
Apr 29 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&java(三)
2006/10/09 PHP
非常不错的MySQL优化的8条经验
2008/03/24 PHP
洪恩在线成语词典小偷程序php版
2012/04/20 PHP
php使用function_exists判断函数可用的方法
2014/11/19 PHP
yii2实现根据时间搜索的方法
2016/05/25 PHP
php查询及多条件查询
2017/02/26 PHP
thinkPHP5实现的查询数据库并返回json数据实例
2017/10/23 PHP
PHP实现用session来实现记录用户登陆信息
2018/10/15 PHP
文本框中,回车键触发事件的js代码[多浏览器兼容]
2010/06/07 Javascript
JavaScript静态类型检查工具FLOW简介
2015/01/06 Javascript
深入浅析同源策略和跨域访问
2015/11/26 Javascript
最简单纯JavaScript实现Tab标签页切换的方式(推荐)
2016/07/25 Javascript
JavaScript中捕获与冒泡详解及实例
2017/02/03 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
Python实现数据库编程方法详解
2015/06/09 Python
在MAC上搭建python数据分析开发环境
2016/01/26 Python
Python跨文件全局变量的实现方法示例
2017/12/10 Python
Python面向对象程序设计示例小结
2019/01/30 Python
解决Python中pandas读取*.csv文件出现编码问题
2019/07/12 Python
linux中如何使用python3获取ip地址
2019/07/15 Python
Pyqt5自适应布局实例
2019/12/13 Python
Python基于class()实现面向对象原理详解
2020/03/26 Python
python数据处理——对pandas进行数据变频或插值实例
2020/04/22 Python
CSS3教程(10):CSS3 HSL声明设置颜色
2009/04/02 HTML / CSS
学习十八大精神心得体会
2013/12/31 职场文书
医校毕业生自我鉴定
2014/01/25 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
马丁路德金演讲稿
2014/05/19 职场文书
领导干部廉政自律承诺书
2014/05/26 职场文书
个人校本研修方案
2014/05/26 职场文书
物流专业专科生职业生涯规划书
2014/09/14 职场文书
销售助理岗位职责
2015/02/11 职场文书
在职证明书模板
2015/06/15 职场文书
TV动画《神废柴☆偶像》公布先导PV
2022/03/20 日漫
使用python绘制横竖条形图
2022/04/21 Python