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

作者:jingxian 时间:2022-04-24 15:36:08 

本文是一篇关于《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,函数,返回列表
0
投稿

猜你喜欢

  • php读取xml实例代码

    2023-11-21 11:47:05
  • 分享十个Python提高工作效率的自动化脚本

    2023-12-20 21:34:05
  • pytorch dataset实战案例之读取数据集的代码

    2023-10-06 23:51:01
  • 详解Django模板层过滤器和继承的问题

    2023-02-08 06:28:04
  • 详解Python中的静态方法与类成员方法

    2022-08-02 23:30:16
  • PyQt5 多窗口连接实例

    2021-06-17 01:32:09
  • PHP登录环节防止sql注入的方法浅析

    2023-07-21 06:41:01
  • Golang数据类型比较详解

    2023-07-17 10:11:21
  • PDO::rollBack讲解

    2023-07-23 06:52:34
  • python密码错误三次锁定(实例讲解)

    2022-03-02 07:51:23
  • Python爬取腾讯视频评论的思路详解

    2021-05-30 23:04:43
  • 《Python学习手册》学习总结

    2021-09-17 08:55:01
  • oracle 安装与SQLPLUS简单用法

    2009-06-10 17:49:00
  • python处理圆角图片、圆形图片的例子

    2021-06-08 15:20:15
  • Access:数据转换问题

    2008-11-20 17:02:00
  • golang中net的tcp服务使用

    2023-08-30 10:54:14
  • Python if else条件语句形式详解

    2021-09-21 06:48:24
  • 以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法

    2022-02-15 19:11:48
  • Python实现二维曲线拟合的方法

    2021-08-26 12:38:01
  • 纯CSS实现动态提示信息Tooltips

    2008-05-22 11:56:00
  • asp之家 网络编程 m.aspxhome.com