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


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 02 Python
Python简单网络编程示例【客户端与服务端】
May 26 Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 Python
python 实现对文件夹内的文件排序编号
Apr 12 Python
tensorflow更改变量的值实例
Jul 30 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
Oct 11 Python
TensorFlow获取加载模型中的全部张量名称代码
Feb 11 Python
python3 logging日志封装实例
Apr 08 Python
python中upper是做什么用的
Jul 20 Python
Python加载数据的5种不同方式(收藏)
Nov 13 Python
Python3+Appium安装及Appium模拟微信登录方法详解
Feb 16 Python
Pygame Event事件模块的详细示例
Nov 17 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中call_user_func函数使用注意事项
2014/11/21 PHP
php中mt_rand()随机数函数用法
2014/11/24 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
php处理复杂xml数据示例
2016/07/11 PHP
解决IE下select标签innerHTML插入option的BUG(兼容IE,FF,Opera,Chrome,Safari)
2010/05/13 Javascript
Package.js  现代化的JavaScript项目make工具
2012/05/23 Javascript
自己做的模拟模态对话框实现代码
2012/05/23 Javascript
JavaScript中判断对象类型的几种方法总结
2013/11/11 Javascript
javascript弹出页面回传值的方法
2015/01/28 Javascript
JS实现同一个网页布局滑动门和TAB选项卡实例
2015/09/23 Javascript
js实现表格筛选功能
2017/01/18 Javascript
react-router browserHistory刷新页面404问题解决方法
2017/12/29 Javascript
vue+express 构建后台管理系统的示例代码
2018/07/19 Javascript
webpack4.x CommonJS模块化浅析
2018/11/09 Javascript
在 Angular-cli 中使用 simple-mock 实现前端开发 API Mock 接口数据模拟功能的方法
2018/11/28 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
jQuery实现聊天对话框
2020/02/08 jQuery
手把手教您实现react异步加载高阶组件
2020/04/07 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
pygame学习笔记(4):声音控制
2015/04/15 Python
举例讲解Python的lambda语句声明匿名函数的用法
2016/07/01 Python
Python3.6实现连接mysql或mariadb的方法分析
2018/05/18 Python
Python两台电脑实现TCP通信的方法示例
2019/05/06 Python
Python3视频转字符动画的实例代码
2019/08/29 Python
Python3 把一个列表按指定数目分成多个列表的方式
2019/12/25 Python
使用python客户端访问impala的操作方式
2020/03/28 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
详解python tkinter 图片插入问题
2020/09/03 Python
MAC Cosmetics官方网站:魅可专业艺术彩妆
2019/04/10 全球购物
外贸主管求职简历的自我评价
2013/10/23 职场文书
优秀广告词大全
2014/03/19 职场文书
元宵节主持词
2014/03/25 职场文书
学校募捐倡议书
2014/05/14 职场文书
学雷锋志愿者活动方案
2014/08/21 职场文书
物业保洁员岗位职责
2015/02/13 职场文书
Python+SeaTable实现计算两个日期间的工作日天数
2022/07/07 Python