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


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序列化和反序列化
Jun 28 Python
python字符串的方法与操作大全
Jan 30 Python
python jieba分词并统计词频后输出结果到Excel和txt文档方法
Feb 11 Python
用Python写一段用户登录的程序代码
Apr 22 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
PyCharm导入python项目并配置虚拟环境的教程详解
Oct 13 Python
基于python实现把图片转换成素描
Nov 13 Python
python基于三阶贝塞尔曲线的数据平滑算法
Dec 27 Python
使用Keras加载含有自定义层或函数的模型操作
Jun 10 Python
python 读取.nii格式图像实例
Jul 01 Python
python如何利用traceback获取详细的异常信息
Jun 05 Python
Python学习开发之图形用户界面详解
Aug 23 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
php仿微信红包分配算法的实现方法
2016/05/13 PHP
php实现多维数组排序的方法示例
2017/03/23 PHP
php把文件设置为插件的技巧方法
2020/02/03 PHP
php操作redis数据库常见方法实例总结
2020/02/20 PHP
YII2框架中添加自定义模块的方法实例分析
2020/03/18 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
javascript中的有名函数和无名函数
2007/10/17 Javascript
JavaScript中setInterval的用法总结
2013/11/20 Javascript
浅析Node.js查找字符串功能
2014/09/03 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
js实现键盘Enter键提交表单的方法
2015/05/27 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
莱鸟介绍window.print()方法
2016/01/06 Javascript
jquery 动态增加,减少input表单的简单方法(必看)
2016/10/12 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
2017/06/22 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
vue.js过滤器+ajax实现事件监听及后台php数据交互实例
2018/05/22 Javascript
nodejs分离html文件里面的js和css的方法
2019/04/09 NodeJs
使用python实现扫描端口示例
2014/03/29 Python
解析Python中while true的使用
2015/10/13 Python
python常见排序算法基础教程
2017/04/13 Python
Python的语言类型(详解)
2017/06/24 Python
python requests 测试代理ip是否生效
2018/07/25 Python
Python安装selenium包详细过程
2019/07/23 Python
PyQt5+Caffe+Opencv搭建人脸识别登录界面
2019/08/28 Python
python 表格打印代码实例解析
2019/10/12 Python
HTML5 weui使用笔记
2019/11/21 HTML / CSS
KEETSA环保床垫:更好的睡眠,更好的生活!
2016/11/24 全球购物
市场营销策划方案
2014/06/11 职场文书
二手房购房协议书范本
2014/10/05 职场文书
防灾减灾宣传标语
2014/10/07 职场文书
创先争优承诺书
2015/01/20 职场文书
公务员年终个人总结
2015/02/12 职场文书
创业计划书之农家乐
2019/10/09 职场文书