对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 相关文章推荐
web.py获取上传文件名的正确方法
Aug 26 Python
整理Python最基本的操作字典的方法
Apr 24 Python
Python中的字典与成员运算符初步探究
Oct 13 Python
python自动裁剪图像代码分享
Nov 25 Python
Python3结合Dlib实现人脸识别和剪切
Jan 24 Python
如何在Django中设置定时任务的方法示例
Jan 18 Python
对python_discover方法遍历所有执行的用例详解
Feb 13 Python
python下PyGame的下载与安装过程及遇到问题
Aug 04 Python
python批量处理文件或文件夹
Jul 28 Python
python爬虫-模拟微博登录功能
Sep 12 Python
用python介绍4种常用的单链表翻转的方法小结
Feb 24 Python
利用Pycharm连接服务器的全过程记录
Jul 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
做一个有下拉功能的留言版
2006/10/09 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
深入剖析PHP中printf()函数格式化使用
2016/05/23 PHP
php微信公众号开发(4)php实现自定义关键字回复
2016/12/15 PHP
文字幻灯片
2006/06/26 Javascript
js脚本学习 比较实用的基础
2006/09/07 Javascript
js left,right,mid函数
2008/06/10 Javascript
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
Jquery ui css framework
2010/06/28 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
2013/11/26 Javascript
用js读、写、删除Cookie代码分享及详细注释说明
2014/06/05 Javascript
jQuery ajax serialize() 方法使用示例
2014/11/02 Javascript
JavaScript中document对象使用详解
2015/01/06 Javascript
JS实现霓虹灯文字效果的方法
2015/08/06 Javascript
Bootstrap源码解读网格系统(3)
2016/12/22 Javascript
微信小程序 限制1M的瘦身技巧与方法详解
2017/01/06 Javascript
详解vue-router传参的两种方式
2018/09/10 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
python中cPickle用法例子分享
2014/01/03 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
python爬取个性签名的方法
2018/06/17 Python
Python使用pyshp库读取shapefile信息的方法
2018/12/29 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
pytorch 实现在一个优化器中设置多个网络参数的例子
2020/02/20 Python
Python库skimage绘制二值图像代码实例
2020/04/10 Python
总结Pyinstaller的坑及终极解决方法(小结)
2020/09/21 Python
详解三种方式实现平滑滚动页面到顶部的功能
2019/04/23 HTML / CSS
海外淘书首选:AbeBooks
2017/07/31 全球购物
超市实习总结自我鉴定
2013/09/19 职场文书
国培计划培训感言
2014/03/11 职场文书
葛优非诚勿扰搞笑征婚台词
2014/03/17 职场文书
怎样填写就业意向
2014/04/02 职场文书
家长通知书教师评语
2014/04/17 职场文书
安全保证书格式
2015/02/28 职场文书
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
Golang并发工具Singleflight
2022/05/06 Golang