Python生成器到底有什么优点?
迭代器
迭代是Python最强大的功能之一,是访问集合元素的一种方式。
迭代器是一个可以记住遍历的位置的对象。
迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。
迭代器有两个基本的方法:iter() 和 next()。
创建迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。
在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。
class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyclass = MyNumbers()
myiter = iter(myclass)for x in myiter:print(x)
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
创建生成器
1.通过生成器函数
def func(): print("111") yield 222 ret = func()
print(ret) 结果:
<generator object func at 0x10567ff68>
2.通过各种推导式来实现生成器
生成器表达式和列表推导式的语法基本上是一样的. 只是把[]替换成()
gen = (i for i in range(10))
print(gen) 结果:
<generator object <genexpr> at 0x106768f10>
生成器优点
转自知乎:https://www.zhihu.com/question/24807364
生成器优点总结:
1. 首先,生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果,这对于大数据量处理,将会非常有用。
2. 除了延迟计算,生成器还能有效提高代码可读性。
使用生成器的注意事项:生成器只能遍历一次。
参考文章:
https://www.cnblogs.com/xiangweilai/p/9468386.html
Python生成器到底有什么优点?相关推荐
- 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器
文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...
- Python生成器next方法和send方法区别详解
yield的语法规则是: 在yield这里暂停函数执行,并返回yield后面表达式的值(默认为None),直到被next()再次调用时,从上次暂停的yield代码处继续往下执行.当没有可继续next( ...
- 学python培训到底能干嘛
Python是在人工智能领域发挥着很重要的作用的,现在依旧有很多人对Python这项技术不是很了解,学Python培训到底能干嘛?下面小编来为大家做下详细的介绍. python其实并不难学,对于初学者 ...
- python生成器使用场景桌面_Python – 如何更简洁地使用生成器?
( Python 3) 我正在使用Python生成器从队列中读取消息. 在消费者读取队列消息之后,它需要能够告诉生成器在成功处理后删除队列消息. 为了将.send()发送到Python生成器,似乎我必 ...
- 小白学python买什么书-书单狗 篇一:小白学Python,到底要看多少书?
书单狗 篇一:小白学Python,到底要看多少书? 2020-07-06 10:52:23 130点赞 1939收藏 76评论 比起Linux,Python的学习资料真的是浩如烟海,即使对于小白来讲, ...
- 流程的python-《流畅的 Python》到底好在哪?
原标题:<流畅的 Python>到底好在哪? <Fluent Python>是我最近一个月的地铁通勤读物,它的优秀不仅超出了我的预期,而且还让我开始思考这样一个问题:一本好书, ...
- python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员
原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...
- python生成器和迭代器作用_浅谈Python中的生成器和迭代器
迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...
- python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)
用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...
最新文章
- 为什么不建议你用a.equals(b)判断对象相等
- 世界上有没有无法破解的密码?揭秘量子通信 | 图图是道
- DB2数据导入导出的小结
- Window下git生成SSH Key以及格式转换
- 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
- 【论文解读】CVPR 2020:物体检测论文精选
- 【华为云技术分享】自动网络搜索(NAS)在语义分割上的应用(一)
- Theano 中文文档 0.9 - 7.2.2 更多示例
- 「小程序JAVA实战」小程序的留言和评价功能(70)
- 网络攻防实验(五)——201521460003王浩洋
- 【廖雪峰官方网站/Java教程】泛型
- 最新凌风云支付系统网站源码全解无后门V4.1.1版本
- 谷歌浏览器安装apizza
- 【软件测试】软件测试为什么会用到Linux?
- vsCode 配置 html 文件警告
- 电脑运行MATLAB直接关机,Matlab相关-----matlab跑完程序后自动关机
- 如何删除word页眉的横线
- 耗子大叔分享的软件设计原则
- [n年以前的诗] 怀念中XXXX年5月的泰山二首
- MySQL 连接挂死了!该如何排查?
热门文章
- Java面试必问:死锁(多线程死锁+数据库死锁)
- 转载:Handlebar使用教程
- dtoj#3699. 胖(joke)
- python 字符串替换_python中如何替换字符串中的\\符号?
- 高精度单目结构光三维重建
- UNC路径-共享文件夹与访问
- RV1126 在Ubuntu18.04开发环境搭建与SDK编译
- ASP.NET项目发布部署到locallhost“本地“IIS服务器
- vue 项目增加水印
- B站“一口气看完系列”也叫带货系列?