
[Python][迭代器和生成器] 带有额外状态的生成器函数
发布日期:2021-05-28 16:50:30
浏览次数:29
分类:技术文章
本文共 1294 字,大约阅读时间需要 4 分钟。
目的
用一个类来包装一个生成器,并添加新的状态在类中,则该类在拥有生成器特性的同时,又持有一些定制的状态信息。
被实验对象
aaabbbcccdddpython apython beeefffgggpython x
代码示例
该示例中未打印出定制化生成器的内容本身,而是打印出了特定时刻的生成器属性内的信息。lines.history才是这个故事的主角。
from collections import deque#deque是一种双向的列表,可以在左右两端增加和删除元素class linehistory: def __init__(self, lines, histlen=3): self.lines = lines self.history = deque(maxlen=histlen) #maxlen代表deque的长度,只能装下3个元素,如果超过该限度,则将最先进入的元素删除 def __iter__(self): for lineno, line in enumerate(self.lines, 1): #枚举函数,起始索引值为1 self.history.append((lineno, line)) #如果是一个普通的生成器,yield就足够了 #但是在此处我们增加一个history,保存了一个特殊的状态 yield line #完成特殊状态处理后,该对象才会像一个普通生成器一样进行yield def clear(self): self.history.clear() #调用了deque的clear方法with open("test") as f: lines = linehistory(f) for line in lines:#遍历lines中的line元素,此时跟history无关 if 'python' in line:#如果line元素中有python这个字符,则执行以下动作 for lineno, hline in lines.history:#把当前的history中的数据对(index,line)逐个打印出来 print('{}:{}'.format(lineno,hline),) print('#'*30)
演示结果
数据中出现了3次python字样的元素,因此打印了3组数据,每组数据只有最新增加的3个元素
3:ccc4:ddd5:python a##############################4:ddd5:python a6:python b##############################8:fff9:ggg10:python x##############################
转载地址:https://blog.csdn.net/qq_33868661/article/details/114877693 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年01月31日 03时04分35秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
cacti 添加tomcat监控
2019-06-30
CentOS下SNMP服务安装
2019-06-30
学习日志---Linux打卡6
2019-06-30
idea远程debug:tomcat
2019-06-30
enter 默认搜索
2019-06-30
Qt工程相关问题杂集
2019-06-30
spark学习2(hive0.13安装)
2019-06-30
PHP全栈开发(五):PHP学习(1.基础语法)
2019-06-30
作业五
2019-06-30
Linux C++服务器程序设计范式
2019-06-30
表单提交日期类型转换和PageHelper插件分页使用
2019-06-30
memcache与memcached扩展的区别
2019-06-30
系统组件:菜单Menu(1)
2019-06-30
js addEventListener attachEvent
2019-06-30
题解 P4277 【河城荷取的烟花】
2019-06-30
查看表空间使用率
2019-06-30
GoldenGate V11.1数据复制限制
2019-06-30
[LeetCode系列] 双单链表共同节点搜索问题
2019-06-30
关于宏和逗号表达式
2019-06-30