博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python学习干货教程(15):迭代器和生成器
阅读量:6904 次
发布时间:2019-06-27

本文共 961 字,大约阅读时间需要 3 分钟。

迭代器

迭代器是一个可以记住遍历的位置的对象。

有两个操作迭代器的内置函数:iter()next()

iter() ——内置函数

返回迭代器对象,语法:

iter(object[, sentinel])

参数:

object -- 可迭代对象

sentinel -- 如果传递了第二个参数,则参数 object 必须是一个可调用的对象(如,函数),此时,iter 创建了一个迭代器对象,每次调用这个迭代器对象的__next__()方法时,都会调用 object。

next() ——内置函数

调用迭代器对象的__next__()方法,返回下一个迭代器对象。

语法:

next(iterator[, default])

参数说明:

iterator -- 可迭代对象

default -- 可选,用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常。

可迭代对象都可用于创建迭代器,迭代器对象可以使用常规for语句或者next() 函数进行遍历。

把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__() 与 __next__() 。

__iter__() 方法返回一个实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。的迭代器对象, 这个迭代器对象

__next__() 方法会返回下一个迭代器对象。

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况,在 __next__() 方法中我们可以设置在完成指定循环次数后触发 StopIteration 异常来结束迭代。

生成器

使用了 yield关键字的函数被称为生成器(generator)。

生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

对一个生成器函数的调用,返回的是一个迭代器对象。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield的值, 并在下一次执行 next() 方法或for语句时从当前位置继续运行。

yield实例

转载于:https://juejin.im/post/5cd39b3c51882535d25674e8

你可能感兴趣的文章
linux特殊权限管理,linux文件访问特殊权限的设置
查看>>
linux 网络编程 51cto,Linux服务器开发,2小时搞定高并发网络编程
查看>>
fork是linux函数吗,关于LINUX中的FORK函数
查看>>
红旗linux 进不去图形界面,进不了红旗Linux6.0的图形界面请高手帮忙
查看>>
linux安装中文语言命令,Centos使用yum命令安装中文语言包(fonts-chinese.noarch,m17n-db-common-cjk)...
查看>>
linux添加Qt的fontconfig,QT__qt SDK------Fontconfig-2.4.2安装 (二)
查看>>
linux 查看io调度策略,磁盘IO调度策略
查看>>
高通笔记本装linux,在华硕畅370(TP370QL)骁龙笔记本上安装Ubuntu 18.04 ARM64的方法...
查看>>
linux sysfs属性,linux-sysfs
查看>>
c语言int speed=1,求大神帮忙看看这个弹弹球消砖块的游戏代码,为什么speed只能15...
查看>>
c语言如何控制误差小于10-n,C语言使用注意事项(二)
查看>>
c语言黑白棋图形,C语言黑白棋游戏[转载]
查看>>
Grunt 入门指南2:任务配置
查看>>
nullnullsql 多条件查询
查看>>
js 字符串转换数字
查看>>
ASP.NET伪静态 UrlRewrite(Url重写) 实现和配置
查看>>
函数调用Java Web使用swfobject调用flex图表
查看>>
加中实训第二天(笔记+代码) - 2013.5.29 (待完善)
查看>>
《JavaScript DOM 编程艺术》小结
查看>>
MYSQ提高L查询效率的策略总结
查看>>