用生成器来改写直接返回列表的函数方法
作者: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,函数,返回列表
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
php读取xml实例代码
2023-11-21 11:47:05
分享十个Python提高工作效率的自动化脚本
2023-12-20 21:34:05
pytorch dataset实战案例之读取数据集的代码
2023-10-06 23:51:01
![](https://img.aspxhome.com/file/2023/4/99204_0s.jpg)
详解Django模板层过滤器和继承的问题
2023-02-08 06:28:04
![](https://img.aspxhome.com/file/2023/0/79400_0s.png)
详解Python中的静态方法与类成员方法
2022-08-02 23:30:16
PyQt5 多窗口连接实例
2021-06-17 01:32:09
![](https://img.aspxhome.com/file/2023/5/95455_0s.jpg)
PHP登录环节防止sql注入的方法浅析
2023-07-21 06:41:01
Golang数据类型比较详解
2023-07-17 10:11:21
![](https://img.aspxhome.com/file/2023/5/93665_0s.jpg)
PDO::rollBack讲解
2023-07-23 06:52:34
python密码错误三次锁定(实例讲解)
2022-03-02 07:51:23
![](https://img.aspxhome.com/file/2023/2/101112_0s.png)
Python爬取腾讯视频评论的思路详解
2021-05-30 23:04:43
![](https://img.aspxhome.com/file/2023/2/70732_0s.jpg)
《Python学习手册》学习总结
2021-09-17 08:55:01
![](https://img.aspxhome.com/file/2023/5/79535_0s.jpg)
oracle 安装与SQLPLUS简单用法
2009-06-10 17:49:00
python处理圆角图片、圆形图片的例子
2021-06-08 15:20:15
![](https://img.aspxhome.com/file/2023/6/92356_0s.png)
Access:数据转换问题
2008-11-20 17:02:00
golang中net的tcp服务使用
2023-08-30 10:54:14
![](https://img.aspxhome.com/file/2023/8/93658_0s.webp)
Python if else条件语句形式详解
2021-09-21 06:48:24
![](https://img.aspxhome.com/file/2023/5/92535_0s.gif)
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2022-02-15 19:11:48
Python实现二维曲线拟合的方法
2021-08-26 12:38:01
纯CSS实现动态提示信息Tooltips
2008-05-22 11:56:00