对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 27 Python
Python 内置函数complex详解
Oct 23 Python
对Python 2.7 pandas 中的read_excel详解
May 04 Python
Python实现爬虫爬取NBA数据功能示例
May 28 Python
Python pip替换为阿里源的方法步骤
Jul 02 Python
PyTorch预训练的实现
Sep 18 Python
Python可变参数会自动填充前面的默认同名参数实例
Nov 18 Python
基于numpy中的expand_dims函数用法
Dec 18 Python
python操作cfg配置文件方式
Dec 22 Python
Python 实现打印单词的菱形字符图案
Apr 12 Python
Python经典五人分鱼实例讲解
Jan 04 Python
尝试使用Python爬取城市租房信息
Apr 12 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获得用户使用的代理服务器ip即真实ip
2006/12/31 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
两个DIV等高的JS的实现代码
2007/12/23 Javascript
jquery时间下拉框小例子
2013/04/15 Javascript
javascript日期计算实例分析
2015/06/29 Javascript
JQuery日期插件datepicker的使用方法
2016/03/03 Javascript
jQuery实现复选框的全选和反选
2017/02/02 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
2017/10/09 Javascript
AngularJS实现的获取焦点及失去焦点时的表单验证功能示例
2017/10/25 Javascript
jQuery实现碰到边缘反弹的动画效果
2018/02/24 jQuery
JS实现Cookie读、写、删除操作工具类示例
2018/08/28 Javascript
读懂CommonJS的模块加载
2019/04/19 Javascript
JS中的算法与数据结构之字典(Dictionary)实例详解
2019/08/20 Javascript
python自动安装pip
2014/04/24 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python实现网站表单提交和模板
2019/01/15 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Pandas 解决dataframe的一列进行向下顺移问题
2019/12/27 Python
Python加速程序运行的方法
2020/07/29 Python
基于Python爬取素材网站音频文件
2020/10/21 Python
怎样声明接口
2014/09/19 面试题
介绍一下Java的事务处理
2012/12/07 面试题
自动化系在校本科生求职信
2013/10/23 职场文书
行政工作个人的自我评价
2014/02/13 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
2015年设计师个人工作总结
2015/04/25 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
对学校的意见和建议
2015/06/04 职场文书
小学校园广播稿
2015/08/18 职场文书
初中美术教学反思
2016/02/17 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
JavaScript实现班级抽签小程序
2021/05/19 Javascript