迭代器

迭代是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生成器到底有什么优点?相关推荐

  1. 怎么用Python写出随时间变化的字_面试必备 | 带你彻底搞懂 Python 生成器

    文章转载地址:面试必备 | 带你彻底搞懂 Python 生成器. 写在之前 Python 的高级语言特性一直是我们学习 Python 的一个难点,大部分人并没有做到熟练的掌握,甚至去学习它都感觉很困难 ...

  2. Python生成器next方法和send方法区别详解

    yield的语法规则是: 在yield这里暂停函数执行,并返回yield后面表达式的值(默认为None),直到被next()再次调用时,从上次暂停的yield代码处继续往下执行.当没有可继续next( ...

  3. 学python培训到底能干嘛

    Python是在人工智能领域发挥着很重要的作用的,现在依旧有很多人对Python这项技术不是很了解,学Python培训到底能干嘛?下面小编来为大家做下详细的介绍. python其实并不难学,对于初学者 ...

  4. python生成器使用场景桌面_Python – 如何更简洁地使用生成器?

    ( Python 3) 我正在使用Python生成器从队列中读取消息. 在消费者读取队列消息之后,它需要能够告诉生成器在成功处理后删除队列消息. 为了将.send()发送到Python生成器,似乎我必 ...

  5. 小白学python买什么书-书单狗 篇一:小白学Python,到底要看多少书?

    书单狗 篇一:小白学Python,到底要看多少书? 2020-07-06 10:52:23 130点赞 1939收藏 76评论 比起Linux,Python的学习资料真的是浩如烟海,即使对于小白来讲, ...

  6. 流程的python-《流畅的 Python》到底好在哪?

    原标题:<流畅的 Python>到底好在哪? <Fluent Python>是我最近一个月的地铁通勤读物,它的优秀不仅超出了我的预期,而且还让我开始思考这样一个问题:一本好书, ...

  7. python培训出来的有公司要吗-参加Python培训到底需要学什么?好程序员

    原标题:参加Python培训到底需要学什么?好程序员 参加Python培训到底需要学什么?好程序员,参加Python培训到底需要学什么?在选择靠谱的北京Python工程师培训之前,你自己也要对Pyth ...

  8. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  9. python生成器杨辉三角_python 生成器生成杨辉三角的方法(必看)

    用Python写趣味程序感觉屌屌的,停不下来 #生成器生成展示杨辉三角 #原理是在一个2维数组里展示杨辉三角,空的地方用0,输出时,转化为' ' def yang(line): n,leng=0,2* ...

最新文章

  1. 为什么不建议你用a.equals(b)判断对象相等
  2. 世界上有没有无法破解的密码?揭秘量子通信 | 图图是道
  3. DB2数据导入导出的小结
  4. Window下git生成SSH Key以及格式转换
  5. 虚拟内存(VirtualAlloc),堆(HeapAlloc/malloc/new)和Memory Mapped File
  6. 【论文解读】CVPR 2020:物体检测论文精选
  7. 【华为云技术分享】自动网络搜索(NAS)在语义分割上的应用(一)
  8. Theano 中文文档 0.9 - 7.2.2 更多示例
  9. 「小程序JAVA实战」小程序的留言和评价功能(70)
  10. 网络攻防实验(五)——201521460003王浩洋
  11. 【廖雪峰官方网站/Java教程】泛型
  12. 最新凌风云支付系统网站源码全解无后门V4.1.1版本
  13. 谷歌浏览器安装apizza
  14. 【软件测试】软件测试为什么会用到Linux?
  15. vsCode 配置 html 文件警告
  16. 电脑运行MATLAB直接关机,Matlab相关-----matlab跑完程序后自动关机
  17. 如何删除word页眉的横线
  18. 耗子大叔分享的软件设计原则
  19. [n年以前的诗] 怀念中XXXX年5月的泰山二首
  20. MySQL 连接挂死了!该如何排查?

热门文章

  1. Java面试必问:死锁(多线程死锁+数据库死锁)
  2. 转载:Handlebar使用教程
  3. dtoj#3699. 胖(joke)
  4. python 字符串替换_python中如何替换字符串中的\\符号?
  5. 高精度单目结构光三维重建
  6. UNC路径-共享文件夹与访问
  7. RV1126 在Ubuntu18.04开发环境搭建与SDK编译
  8. ASP.NET项目发布部署到locallhost“本地“IIS服务器
  9. vue 项目增加水印
  10. B站“一口气看完系列”也叫带货系列?