对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 24 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
WINDOWS 同时安装 python2 python3 后 pip 错误的解决方法
Mar 16 Python
Python获取当前页面内所有链接的四种方法对比分析
Aug 19 Python
python模块之sys模块和序列化模块(实例讲解)
Sep 13 Python
python中使用正则表达式的连接符示例代码
Oct 10 Python
python 获取图片分辨率的方法
Jan 08 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 Python
python判断无向图环是否存在的示例
Nov 22 Python
python字符串下标与切片及使用方法
Feb 13 Python
python编程进阶之类和对象用法实例分析
Feb 21 Python
Django如何批量创建Model
Sep 01 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写的MySQL数据库用户认证系统代码
2007/03/22 PHP
php数据结构与算法(PHP描述) 快速排序 quick sort
2012/06/21 PHP
php添加文章时生成静态HTML文章的实现代码
2013/02/17 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
ThinkPHP入口文件设置及相关注意事项分析
2014/12/05 PHP
php模拟post提交数据的方法
2015/02/12 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
将JavaScript的jQuery库中表单转化为JSON对象的方法
2015/11/17 Javascript
在 Express 中使用模板引擎
2015/12/10 Javascript
简单谈谈json跨域
2016/03/13 Javascript
JavaScript中闭包的写法和作用详解
2016/06/29 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
three.js欧拉角和四元数的使用方法
2020/07/26 Javascript
JavaScript中的执行环境和作用域链
2020/09/04 Javascript
wxPython窗口中文乱码解决方法
2014/10/11 Python
python中numpy包使用教程之数组和相关操作详解
2017/07/30 Python
Python格式化日期时间操作示例
2018/06/28 Python
Flask和Django框架中自定义模型类的表名、父类相关问题分析
2018/07/19 Python
详解python实现小波变换的一个简单例子
2019/07/18 Python
Python爬取破解无线网络wifi密码过程解析
2019/09/17 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
Python 函数绘图及函数图像微分与积分
2019/11/20 Python
python 两种方法修改文件的创建时间、修改时间、访问时间
2020/09/26 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
台湾良兴购物网:EcLife
2019/12/01 全球购物
什么是符号链接,什么是硬链接?符号链接与硬链接的区别是什么?
2013/05/03 面试题
工作个人的自我评价
2014/01/14 职场文书
警示教育活动总结
2014/05/05 职场文书
2014年信用社工作总结
2014/11/25 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
西柏坡观后感
2015/06/08 职场文书
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript