python中的生成器
来源:互联网 发布:淘宝发布宝贝颜色分类 编辑:程序博客网 时间:2024/06/13 06:58
利⽤迭代器,可以在每次迭代读取数据(通过next()⽅法)时按照特定的规律进⾏⽣成。但是我们在实现⼀个迭代器时,关于当前迭代到的状态需要我们⾃⼰记录,进⽽才能根据当前状态⽣成下⼀个数据。为了达到记录当前状态,并配合next()函数进⾏迭代使⽤,我们可以采⽤更简便的语法,即⽣成器(generator)。⽣成器是⼀类特殊的迭代器。
创建⽣成器⽅法1
要创建⼀个⽣成器,有很多种⽅法。第⼀种⽅法很简单,只要把⼀个列表⽣成式的[]改成()
创建⽣成器⽅法2
generator⾮常强⼤。如果推算的算法比较复杂,⽤类似列表⽣成式的 for循环⽆法实现的时候,还可以⽤函数来实现。
在使⽤⽣成器实现的⽅式中,我们将原本在迭代器 __next__ ⽅法中实现的基本逻辑放到⼀个函数中来实现,但是将每次迭代返回数值的return换成了yield,此时新定义的函数便不再是函数,⽽是⼀个⽣成器了。
总结
1.使⽤了yield关键字的函数不再是函数,⽽是⽣成器。(使⽤了yield的函数就是⽣成器)
2.yield关键字有两点作⽤:
保存当前运⾏状态(断点),然后暂停执行,即将⽣成器(函数)挂起
将yield关键字后⾯表达式的值作为返回值,此时可以理解为起到了return的作⽤
可以使⽤next()函数让⽣成器从断点处继续执行,即唤醒⽣成器(函数)
Python3中的⽣成器可以使⽤return返回最终运⾏的返回值,⽽Python2中的⽣成器不允许使⽤return返回⼀个返回值(即可以使⽤return从⽣成器中退出,但return后不能有任何表达式)。
使⽤send唤醒
我们除了可以使⽤next()函数来唤醒⽣成器继续执⾏外,还可以使⽤send()函数来唤醒执⾏。使⽤send()函数的⼀个好处是可以在唤醒的同时向断点处传入⼊⼀个附加数据。
注意:
gen_obj.__next__() 等价于 gen_obj.send(none)
- Python中的生成器
- python中的生成器
- python中的生成器(Generators)
- python中的生成器generator
- python中的生成器
- python中的迭代器与生成器
- python中的迭代器与生成器 .
- 小窥python中的生成器
- python中的生成器(generator)
- python中的迭代器与生成器
- python中的生成器(generator)
- python中的迭代器与生成器
- python中的生成器和迭代器
- python中的迭代器和生成器
- Python中的迭代器和生成器
- python中的生成器和迭代器
- Python中的生成器与迭代器
- 深入理解Python中的生成器
- HTTP API自动化测试
- go udp 简单实现
- HDU-6065 RXD, tree and sequence(dp+LCA)
- oracle触发器
- 对xml进行广度优先遍历
- python中的生成器
- HDU 6078 Wavel Sequence【dp递推】【好题】【思维题】
- Renesas CS+ for ca cx入门(二)
- 机器学习、Python和数学学习资料汇总
- 关于java的一些经典面试题
- Java集合之LinkedList源码解析
- C语言-指针(一)
- 共享纸巾杀来!免费领取从此不用再买纸巾了...
- 网络学习笔记-TCP首部