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


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网络爬虫出现乱码问题的解决方法
Jan 05 Python
python 上下文管理器使用方法小结
Oct 10 Python
利用Python+Java调用Shell脚本时的死锁陷阱详解
Jan 24 Python
PyQt5实现无边框窗口的标题拖动和窗口缩放
Apr 19 Python
关于pytorch中网络loss传播和参数更新的理解
Aug 20 Python
Python queue队列原理与应用案例分析
Sep 27 Python
使用Pyhton集合set()实现成果查漏的例子
Nov 24 Python
Python基于requests库爬取网站信息
Mar 02 Python
基于python tkinter的点名小程序功能的实例代码
Aug 22 Python
python openpyxl模块的使用详解
Feb 25 Python
python实现自动清理文件夹旧文件
May 10 Python
Python使用socket去实现TCP客户端和TCP服务端
Apr 12 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
超级实用的7个PHP代码片段分享
2012/01/05 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
利用php获得flv视频长度的实例代码
2017/10/26 PHP
Laravel如何使用Redis共享Session
2018/02/23 PHP
Js的MessageBox
2006/12/03 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
window.open不被拦截的实现代码
2012/08/22 Javascript
js自定义事件及事件交互原理概述(一)
2013/02/01 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
iPhone手机上搭建nodejs服务器步骤方法
2015/07/06 NodeJs
js带前后翻页的图片切换效果代码分享
2015/09/08 Javascript
实例解析JS布尔对象的toString()方法和valueOf()方法
2015/10/25 Javascript
JS截取字符串实例详解
2015/11/24 Javascript
js实现自定义路由
2017/02/04 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
JQuery EasyUI 结合ztrIee的后台页面开发实例
2017/09/01 jQuery
在 Node.js 中使用 async 函数的方法
2017/11/17 Javascript
你点的 ES6一些小技巧,请查收
2018/04/25 Javascript
详解性能更优越的小程序图片懒加载方式
2018/07/18 Javascript
vue3.0 CLI - 2.4 - 新组件 Forms.vue 中学习表单
2018/09/14 Javascript
es6 filter() 数组过滤方法总结
2019/04/03 Javascript
vue-cli3项目展示本地Markdown文件的方法
2019/06/07 Javascript
VUE解决 v-html不能触发点击事件的问题
2019/10/28 Javascript
pytorch实现用Resnet提取特征并保存为txt文件的方法
2019/08/20 Python
使用 Python 清理收藏夹里已失效的网站
2019/12/03 Python
python闭包、深浅拷贝、垃圾回收、with语句知识点汇总
2020/03/11 Python
美国汽配连锁巨头Pep Boys官网:轮胎更换、汽车维修服务和汽车零部件
2017/01/14 全球购物
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
学习党课思想汇报
2013/12/29 职场文书
校园创业策划书
2014/01/14 职场文书
《我为你骄傲》教学反思
2014/02/20 职场文书
旅游活动总结
2014/08/27 职场文书
甜品店创业计划书
2014/09/21 职场文书
村主任当选感言
2015/08/01 职场文书
TS 类型兼容教程示例详解
2022/09/23 Javascript