对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 相关文章推荐
Python字符串处理函数简明总结
Apr 13 Python
解析Python中的eval()、exec()及其相关函数
Dec 20 Python
Python机器学习之决策树算法
Dec 22 Python
Pycharm 设置自定义背景颜色的图文教程
May 23 Python
python实现决策树分类(2)
Aug 30 Python
Python流行ORM框架sqlalchemy安装与使用教程
Jun 04 Python
PyQt5 窗口切换与自定义对话框的实例
Jun 20 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
经验丰富程序员才知道的8种高级Python技巧
Jul 27 Python
Python使用海龟绘图实现贪吃蛇游戏
Jun 18 Python
Python使用psutil库对系统数据进行采集监控的方法
Aug 23 Python
Python编程super应用场景及示例解析
Oct 05 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
PHP定时自动生成静态HTML的实现代码
2010/06/20 PHP
php的日期处理函数及uchome的function_coomon中日期处理函数的研究
2011/01/12 PHP
PHP实现批量生成App各种尺寸Logo
2015/03/19 PHP
php实现CSV文件导入和导出
2015/10/24 PHP
php成功操作redis cluster集群的实例教程
2019/01/13 PHP
javascript IE中的DOM ready应用技巧
2008/07/23 Javascript
JavaScript中的typeof操作符用法实例
2014/04/05 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
前端轻量级MVC框架CanJS详解
2014/09/26 Javascript
轻松创建nodejs服务器(10):处理POST请求
2014/12/18 NodeJs
jQuery实现折线图的方法
2015/02/28 Javascript
JavaScript动态添加事件之事件委托
2016/07/12 Javascript
js防阻塞加载的实现方法
2016/09/09 Javascript
详解JS几种变量交换方式以及性能分析对比
2016/11/25 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
2017/01/13 Javascript
JS+CSS实现网页加载中的动画效果
2017/10/27 Javascript
微信小程序实现横向增长表格的方法
2018/07/24 Javascript
node中的cookie的具体使用
2018/09/13 Javascript
微信小程序—setTimeOut定时器的问题及解决
2019/07/26 Javascript
python的类方法和静态方法
2014/12/13 Python
python回调函数中使用多线程的方法
2017/12/25 Python
使用Python制作微信跳一跳辅助
2018/01/31 Python
Python 通配符删除文件的实例
2018/04/24 Python
pandas DataFrame 根据多列的值做判断,生成新的列值实例
2018/05/18 Python
如何使用python实现模拟鼠标点击
2020/01/06 Python
python构造IP报文实例
2020/05/05 Python
Python3批量创建Crowd用户并分配组
2020/05/20 Python
Python pexpect模块及shell脚本except原理解析
2020/08/03 Python
python logging模块的使用详解
2020/10/23 Python
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
顶撞老师检讨书
2014/02/07 职场文书
2014年食堂工作总结
2014/11/20 职场文书
大学生考试作弊被抓检讨书
2014/12/27 职场文书
教师节作文之小学四年级
2019/09/03 职场文书
​(迎国庆)作文之我爱我的祖国
2019/09/19 职场文书
在Oracle表中进行关键词搜索的过程
2022/06/10 Oracle