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


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 24 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
python算法演练_One Rule 算法(详解)
May 17 Python
python生成excel的实例代码
Nov 08 Python
Python中pygal绘制雷达图代码分享
Dec 07 Python
tensorflow实现简单的卷积网络
May 24 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
May 27 Python
浅谈django channels 路由误导
May 28 Python
学python最电脑配置有要求么
Jul 05 Python
selenium切换标签页解决get超时问题的完整代码
Aug 30 Python
什么是Python包的循环导入
Sep 08 Python
python selenium 获取接口数据的实现
Dec 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)
2013/06/21 PHP
php用wangeditor3实现图片上传功能
2019/08/22 PHP
JS面向对象编程 for Cookie
2010/09/19 Javascript
jQuery中绑定事件的命名空间详解
2011/04/05 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
JQuery中DOM事件合成用法实例分析
2015/06/13 Javascript
探讨跨域请求资源的几种方式(总结)
2016/12/02 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
2017/03/29 jQuery
源码分析Vue.js的监听实现教程
2017/04/23 Javascript
jquery制作的移动端购物车效果完整示例
2020/02/24 jQuery
基于vue的video播放器的实现示例
2021/02/19 Vue.js
python学习之第三方包安装方法(两种方法)
2015/07/30 Python
Python拼接微信好友头像大图的实现方法
2018/08/01 Python
Python Pandas 获取列匹配特定值的行的索引问题
2019/07/01 Python
浅析matlab中imadjust函数
2020/02/27 Python
Django认证系统user对象实现过程解析
2020/03/02 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
Python类的绑定方法和非绑定方法实例解析
2020/03/04 Python
python+opencv边缘提取与各函数参数解析
2020/03/09 Python
Python+PyQt5+MySQL实现天气管理系统
2020/06/16 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
2020/11/17 Python
解决margin 外边距合并问题
2019/07/03 HTML / CSS
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
手工制作的意大利皮革运动鞋:KOIO
2020/01/05 全球购物
DTD的含义以及作用
2014/01/26 面试题
会计专业的自荐信
2013/12/12 职场文书
安全检查管理制度
2014/02/02 职场文书
网络管理员岗位职责
2014/03/17 职场文书
乡镇精神文明建设汇报材料
2014/08/15 职场文书
工作证明格式及范本
2014/09/12 职场文书
开发房地产协议书
2014/09/14 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
2015年乡镇流动人口工作总结
2015/05/12 职场文书
2016年“抗战胜利纪念日”71周年校园广播稿
2015/12/18 职场文书
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis