Python语法 - 生成器
生成器基本概念
1 生成器不会把结果保存在一个系列中,而是保存生成器的状态,在每次进行迭代时返回一个值,直到遇到StopIteration异常结束
2 生成器表达式能做的事情列表解析基本都能处理,只不过在需要处理的序列比较大时,列表解析比较费内存,所以生成器可以用在需要节省内存的场景
3 生成器函数: 在函数中如果出现了yield关键字,那么该函数就不再是普通函数,而是生成器函数
4 next( generator object) 可以用于获取生成器返回的值
例子
def test():
i = 0
while True:
yield i
i += 1
I = test()
print (next(I))
print (next(I))
也可以用下面方式迭代,效果一样
print( I.next() )
print( I.next() )
注意: 直接
print( next(test()) )
print ( next(test()) )
是错误的,因为是俩个实例,所以输出都会是0
yield 与 return
在一个生成器中,如果没有return,则默认执行到函数完毕时返回StopIteration;
如果遇到return,如果在执行过程中 return,则直接抛出 StopIteration 终止迭代。
如果在return后返回一个值,那么这个值为StopIteration异常的说明,不是程序的返回值
def test():
i = 0
while True:
yield i
i += 1
if i > 5:
break
print( I.next() )
print( I.next() )
print( I.next() )
print( I.next() )
print( I.next() )
print( I.next() )
print( I.next() )
输出
0
1
2
3
4
5
Traceback (most recent call last):
File "C:\string.bak.py", line 31, in <module>
print( I.next() )
StopIteration
生成器支持的方法
>>> help(odd_num)
对于普通的生成器,第一个next调用,相当于启动生成器,会从生成器函数的第一行代码开始执行,直到第一次执行完yield语句(第4行)后,跳出生成器函数。
然后第二个next调用,进入生成器函数后,从yield语句的下一句语句(第5行)开始执行,然后重新运行到yield语句,执行后,跳出生成器函数,
后面再次调用next,依次类推
最新文章
- 使用IHTMLDocument2解决弹出";为了让该网站给你提供个人化信息,是否允许在你计算机放置cookie?";
- 第7章 权限管理(1)_ACL权限
- MAC air 安装redis-3.0.6
- IIS7 IIS7.5 配置备份
- linux添加字体的过程
- Linux 批量解压gz包
- C#算法基础之递归排序
- 百度参投 Uber中国12亿美元融资已到账
- hdu3999The order of a Tree (二叉平衡树(AVL))
- ProvissyTool Update Support Page
- NHProfiler使用方法
- 【卸载】oracle卸载
- mysql4 - 高级操作
- java定时任务调度-Timer(1)
- (七) Keras 绘制网络结构和cpu,gpu切换
- C++回顾day03---<;输入输出流>;
- 聊聊Google DSM产品的发布
- RabbitMQ管理界面
- mysql.user表中Host为%的含义
- LeetCode--283--移动0
热门文章
- 前端开发 Vue -3axios
- 如何禁止Chrome浏览器隐藏URL的WWW前缀
- 听课笔记--DP--Authentication Failed
- 解决tensorflow 调用bug Running model failed:Invalid argument: NodeDef mentions attr &#39;dilations&#39; not in Op<;name=Conv2D; signature=input:T, filter:T ->;
- 03 Django之视图函数
- linux服务脚本
- MySQL Windows安装连接
- Signal Processing and Pattern Recognition in Vision_15_RANSAC:Random Sample Consensus——1981
- libssh
- 机器学习中的数学-强大的矩阵奇异值分解(SVD)及其应用