对Python中Iterator和Iterable的区别详解


Posted in Python onOctober 18, 2018

Python中 list,truple,str,dict这些都可以被迭代,但他们并不是迭代器。为什么?

因为和迭代器相比有一个很大的不同,list/truple/map/dict这些数据的大小是确定的,也就是说有多少事可知的。但迭代器不是,迭代器不知道要执行多少次,所以可以理解为不知道有多少个元素,每调用一次next(),就会往下走一步,是惰性的。

判断是不是可以迭代,用Iterable

from collections import Iterable
isinstance({}, Iterable) --> True
isinstance((), Iterable) --> True
isinstance(100, Iterable) --> False

判断是不是迭代器,用Iterator

from collections import Iterator
isinstance({}, Iterator) --> False
isinstance((), Iterator) --> False
isinstance( (x for x in range(10)), Iterator) --> True

所以,

凡是可以for循环的,都是Iterable

凡是可以next()的,都是Iterator

集合数据类型如list,truple,dict,str,都是Itrable不是Iterator,但可以通过iter()函数获得一个Iterator对象

Python中的for循环就是通过next实现的

for x in [1,2,3,4,5]:
 pass

等价于

#先获取iterator对象
it = iter([1,2,3,4,5])
while True:
 try:
  #获取下一个值
  x = next(it);
 except StopIteration:
  # 遇到StopIteration就退出循环
  break

以上这篇对Python中Iterator和Iterable的区别详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
Python实现获取nginx服务器ip及流量统计信息功能示例
May 18 Python
python xlsxwriter创建excel图表的方法
Jun 11 Python
Python中矩阵创建和矩阵运算方法
Aug 04 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
Oct 30 Python
python游戏地图最短路径求解
Jan 16 Python
Python基础学习之函数方法实例详解
Jun 18 Python
python requests指定出口ip的例子
Jul 25 Python
python matplotlib库绘制条形图练习题
Aug 10 Python
django admin 添加自定义链接方式
Mar 11 Python
python实现自动打卡的示例代码
Oct 10 Python
Python+OpenCV图像处理——图像二值化的实现
Oct 24 Python
对python中的iter()函数与next()函数详解
Oct 18 #Python
对Python 3.2 迭代器的next函数实例讲解
Oct 18 #Python
对python中的高效迭代器函数详解
Oct 18 #Python
对Python中内置异常层次结构详解
Oct 18 #Python
Python运维开发之psutil库的使用详解
Oct 18 #Python
python实现自动登录后台管理系统
Oct 18 #Python
python 对给定可迭代集合统计出现频率,并排序的方法
Oct 18 #Python
You might like
Http 1.1 Etag 与 Last-Modified提高php效率
2008/01/10 PHP
探讨:如何使用PhpDocumentor生成文档
2013/06/25 PHP
PHP函数之日期时间函数date()使用详解
2013/09/09 PHP
PHP使用mkdir创建多级目录的方法
2015/12/22 PHP
再谈IE中Flash控件的自动激活 ObjectWrap
2007/03/09 Javascript
原生js写的放大镜效果
2012/08/22 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
jquery选择器之层级过滤选择器详解
2014/01/27 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
在JavaScript中处理字符串之link()方法的使用
2015/06/08 Javascript
JavaScript实现横向滑出的多级菜单效果
2015/10/09 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
JavaScript定时器制作弹窗小广告
2017/02/05 Javascript
vue子组件使用自定义事件向父组件传递数据
2017/05/27 Javascript
JS获取鼠标坐标并且根据鼠标位置不同弹出不同内容
2017/06/12 Javascript
浅谈Vue父子组件和非父子组件传值问题
2017/08/22 Javascript
vue cli2.0单页面title修改方法
2018/06/07 Javascript
解决layui表格内文本超出隐藏的问题
2019/09/12 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
基于js实现逐步显示文字输出代码实例
2020/04/02 Javascript
[01:18]一目了然!DOTA2DotA快捷操作对比第一弹
2014/07/01 DOTA
老生常谈python之鸭子类和多态
2017/06/13 Python
Python科学计算包numpy用法实例详解
2018/02/08 Python
python实现比较文件内容异同
2018/06/22 Python
python中watchdog文件监控与检测上传功能
2020/10/30 Python
用python发送微信消息
2020/12/21 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
2021/01/05 Python
蔻驰美国官网:COACH美国
2016/08/18 全球购物
司法助理专业自荐书
2014/06/13 职场文书
优秀应届毕业生自荐书
2014/06/29 职场文书
幼儿园大班教师个人总结
2015/02/05 职场文书
2015年世界无烟日活动总结
2015/02/10 职场文书
劳动争议仲裁代理词
2015/05/25 职场文书
2016银行求职自荐信
2016/01/28 职场文书
总结Python使用过程中的bug
2021/06/18 Python