对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中的reduce内建函数使用方法指南
Aug 31 Python
python获取局域网占带宽最大3个ip的方法
Jul 09 Python
python实现树形打印目录结构
Mar 29 Python
Django后台admin的使用详解
Jul 08 Python
django项目中使用手机号登录的实例代码
Aug 15 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
python将字典列表导出为Excel文件的方法
Sep 02 Python
Python使用docx模块实现刷题功能代码
Feb 13 Python
scrapy头部修改的方法详解
Dec 06 Python
Python中使用subprocess库创建附加进程
May 11 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 Python
Python Flask搭建yolov3目标检测系统详解流程
Nov 07 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
全国中波电台频率表
2020/03/11 无线电
百度地图API应用之获取用户的具体位置
2014/06/10 PHP
php中mysql操作buffer用法详解
2015/03/19 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
2016/05/20 PHP
CI框架常用函数封装实例
2016/11/21 PHP
thinkPHP5框架路由常用知识点汇总
2019/09/15 PHP
PHP MVC框架中类的自动加载机制实例分析
2019/09/18 PHP
SWFObject 2.1以上版本语法介绍
2010/07/10 Javascript
js中数组(Array)的排序(sort)注意事项说明
2014/01/24 Javascript
node.js中的fs.chmod方法使用说明
2014/12/18 Javascript
浅析Node.js中的内存泄漏问题
2015/06/23 Javascript
javascript实现类似百度分享功能的方法
2015/07/27 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
H5移动端图片压缩上传开发流程
2016/11/09 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
jQuery Ajax 实现分页 kkpager插件实例代码
2017/08/10 jQuery
Vue2.0 给Tab标签页和页面切换过渡添加样式的方法
2018/03/13 Javascript
Vue中的vue-resource示例详解
2018/11/02 Javascript
解决echarts的多个折现数据出现坐标和值对不上的问题
2018/12/28 Javascript
ES6 Object属性新的写法实例小结
2019/06/25 Javascript
JavaScript 作用域实例分析
2019/10/02 Javascript
python3+selenium实现126邮箱登陆并发送邮件功能
2019/01/23 Python
Python实现的服务器示例小结【单进程、多进程、多线程、非阻塞式】
2019/05/23 Python
python设置环境变量的作用和实例
2019/07/09 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
Python实现不规则图形填充的思路
2020/02/02 Python
浅析matlab中imadjust函数
2020/02/27 Python
Python爬取365好书中小说代码实例
2020/02/28 Python
Python Opencv实现单目标检测的示例代码
2020/09/08 Python
abstract 可以和 virtual 一起使用吗?可以和 override 一起使用吗?
2012/10/15 面试题
小学三八妇女节活动方案
2014/03/16 职场文书
三行辞职书范文
2015/02/26 职场文书
2015年高三毕业班班主任工作总结
2015/10/22 职场文书
队名及霸气口号大全
2015/12/25 职场文书
缓存替换策略及应用(以Redis、InnoDB为例)
2021/07/25 Redis