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


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笔记(1) 关于我们应不应该继续学习python
Oct 24 Python
Python2.7编程中SQLite3基本操作方法示例
Aug 09 Python
python+selenium实现登录账户后自动点击的示例
Dec 22 Python
python抓取京东小米8手机配置信息
Nov 13 Python
Python开发之Nginx+uWSGI+virtualenv多项目部署教程
May 13 Python
Python Web程序搭建简单的Web服务器
Jul 31 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
Django模板获取field的verbose_name实例
May 19 Python
python 还原梯度下降算法实现一维线性回归
Oct 22 Python
Python 打印自己设计的字体的实例讲解
Jan 04 Python
python使用numpy中的size()函数实例用法详解
Jan 29 Python
Python基础之函数嵌套知识总结
May 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
php disk_free_space 返回目录可用空间
2010/05/10 PHP
PHP 转义使用详解
2013/07/15 PHP
CI(CodeIgniter)框架配置
2014/06/10 PHP
PHP解析目录路径的3个函数总结
2014/11/18 PHP
smarty的section嵌套循环用法示例
2016/05/28 PHP
PHP提取字符串中的手机号正则表达式怎么写
2017/07/17 PHP
JavaScript CSS修改学习第六章 拖拽
2010/02/19 Javascript
关于Javascript模块化和命名空间管理的问题说明
2010/12/06 Javascript
jquery获取div宽度的实现思路与代码
2013/01/13 Javascript
jQuery控制TR显示隐藏的三种常用方法
2014/08/21 Javascript
谷歌浏览器调试JavaScript小技巧
2014/12/29 Javascript
基于jquery实现最简单的选项卡切换效果
2016/05/08 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
windows 下安装nodejs 环境变量设置
2017/02/02 NodeJs
JS 学习总结之正则表达式的懒惰性和贪婪性
2017/07/03 Javascript
微信小程序 获取javascript 里的数据
2017/08/17 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
[16:04]DOTA2海涛带你玩炸弹 9月5日更新内容详解
2014/09/05 DOTA
[33:19]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第一场 11.26
2020/11/30 DOTA
比较详细Python正则表达式操作指南(re使用)
2008/09/06 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python shell根据ip获取主机名代码示例
2017/11/25 Python
python中的内置函数max()和min()及mas()函数的高级用法
2018/03/29 Python
Python字符串的常见操作实例小结
2019/04/08 Python
python 带时区的日期格式化操作
2020/10/23 Python
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
会计专业自我鉴定范文
2013/10/06 职场文书
专业求职信撰写要诀
2014/02/18 职场文书
会计工作决心书
2014/03/11 职场文书
经济信息系毕业生自荐信范文
2014/03/15 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
关爱老人标语
2014/06/21 职场文书
学校领导班子成员查摆问题及整改措施
2014/10/28 职场文书
2014年社区工会工作总结
2014/12/18 职场文书
客户答谢会致辞
2015/01/20 职场文书
python Django框架快速入门教程(后台管理)
2021/07/21 Python