对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 简单的绘图工具turtle使用详解
Jun 21 Python
Python基础学习之常见的内建函数整理
Sep 06 Python
理解python中生成器用法
Dec 20 Python
JavaScript实现一维数组转化为二维数组
Apr 17 Python
谈谈Python中的while循环语句
Mar 10 Python
PyQt5基本控件使用详解:单选按钮、复选框、下拉框
Aug 05 Python
django实现支付宝支付实例讲解
Oct 17 Python
python return逻辑判断表达式实现解析
Dec 02 Python
简单了解django文件下载方式
Feb 10 Python
python3 logging日志封装实例
Apr 08 Python
学python需要去培训机构吗
Jul 01 Python
解决pycharm 格式报错tabs和space不一致问题
Feb 26 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
ThinkPHP使用Smarty第三方插件方法小结
2016/03/19 PHP
JS 自动完成 AutoComplete(Ajax 查询)
2009/07/07 Javascript
JS实现图片翻书效果示例代码
2013/09/09 Javascript
js如何获取兄弟、父类等节点
2014/01/06 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
JavaScript中数组的合并以及排序实现示例
2015/10/24 Javascript
JS中使用apply、bind实现为函数或者类传入动态个数的参数
2016/04/26 Javascript
ajax跨域调用webservice的实现代码
2016/05/09 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
javascript中的 object 和 function小结
2016/08/14 Javascript
js eval函数使用,js对象和字符串互转实例
2017/03/06 Javascript
Javascript面试经典套路reduce函数查重
2017/03/23 Javascript
使用vue的v-for生成table并给table加上序号的实例代码
2017/10/27 Javascript
AngularJS实现的锚点楼层跳转功能示例
2018/01/02 Javascript
Vuejs 单文件组件实例详解
2018/02/09 Javascript
vue-router命名视图的使用讲解
2019/01/19 Javascript
python根据路径导入模块的方法
2014/09/30 Python
以Python的Pyspider为例剖析搜索引擎的网络爬虫实现方法
2015/03/30 Python
Windows下PyMongo下载及安装教程
2015/04/27 Python
判断网页编码的方法python版
2016/08/12 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
2017/12/12 Python
Django用户认证系统 组与权限解析
2019/08/02 Python
用python对excel查重
2020/12/07 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
钉钉企业内部H5微应用开发详解
2020/05/12 HTML / CSS
美国女性服饰销售网站:Nasty Gal(坏女孩)
2016/07/26 全球购物
微软中国官方商城:Microsoft Store中国
2018/10/12 全球购物
Baby Tulai澳大利亚:美国婴儿背带品牌
2018/10/15 全球购物
阿迪达斯英国官方网站:adidas英国
2019/08/13 全球购物
文明礼仪伴我行演讲稿
2014/05/12 职场文书
社会工作专业自荐信
2014/09/26 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
2015年家长学校工作总结
2015/04/22 职场文书
matplotlib画混淆矩阵与正确率曲线的实例代码
2021/06/01 Python
攻击最高的10只幽灵系神奇宝贝,坚盾剑怪排第一,第五最为可怕
2022/03/18 日漫