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


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中利用Pandas库处理大数据的简单介绍
Apr 07 Python
Python二分查找详解
Sep 13 Python
Python正则获取、过滤或者替换HTML标签的方法
Jan 28 Python
Python实现随机选择元素功能
Sep 14 Python
Python中将dataframe转换为字典的实例
Apr 13 Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
python异步编程 使用yield from过程解析
Sep 25 Python
python常用排序算法的实现代码
Nov 08 Python
python将四元数变换为旋转矩阵的实例
Dec 04 Python
小 200 行 Python 代码制作一个换脸程序
May 12 Python
Python模拟键盘输入自动登录TGP
Nov 27 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
Laravel框架实现简单的学生信息管理平台案例
2019/05/07 PHP
TP5框架model常见操作示例小结【增删改查、聚合、时间戳、软删除等】
2020/04/05 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
jquery对dom的操作常用方法整理
2013/06/25 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
javascript实现通过表格绘制颜色填充矩形的方法
2015/04/21 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
2016/01/26 Javascript
jquery分页插件jquery.pagination.js实现无刷新分页
2016/04/01 Javascript
javascript实现消灭星星小游戏简单版
2016/11/15 Javascript
canvas实现刮刮卡效果
2017/03/14 Javascript
javascript 跨域问题以及解决办法
2017/07/17 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
layui实现把数据表格时间戳转换为时间格式的例子
2019/09/12 Javascript
vue fetch中的.then()的正确使用方法
2020/04/17 Javascript
[01:37]TI4西雅图DOTA2前线报道 VG拿下首胜教练357给出获胜秘诀
2014/07/10 DOTA
[47:21]Liquid vs TNC Supermajor 胜者组 BO3 第一场 6.4
2018/06/05 DOTA
[01:26]神话结束了,却也刚刚开始——DOTA2新英雄玛尔斯驾临战场
2019/03/10 DOTA
在Python下进行UDP网络编程的教程
2015/04/29 Python
Python ValueError: invalid literal for int() with base 10 实用解决方法
2015/06/21 Python
在Django框架中设置语言偏好的教程
2015/07/27 Python
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
Python KMeans聚类问题分析
2018/02/23 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
解决pip install xxx报错SyntaxError: invalid syntax的问题
2018/11/30 Python
python根据多个文件名批量查找文件
2019/08/13 Python
aws 通过boto3 python脚本打pach的实现方法
2020/05/10 Python
详解python第三方库的安装、PyInstaller库、random库
2021/03/03 Python
css3给背景图片加颜色遮罩的方法
2019/11/05 HTML / CSS
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
员工评语大全
2014/01/19 职场文书
《长相思》听课反思
2014/04/10 职场文书
2014年医院工作总结
2014/11/20 职场文书
《你在为谁工作》心得体会(共8篇)
2016/01/20 职场文书
Ajax异步刷新功能及简单案例
2021/11/20 Javascript
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫