对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之import机制详解
Jul 03 Python
Python实现生成简单的Makefile文件代码示例
Mar 10 Python
Python线程的两种编程方式
Apr 14 Python
Django实现图片文字同时提交的方法
May 26 Python
python简单文本处理的方法
Jul 10 Python
python实现发送邮件及附件功能
Mar 02 Python
python3+PyQt5+Qt Designer实现扩展对话框
Apr 20 Python
python3+PyQt5泛型委托详解
Apr 24 Python
Python中几种属性访问的区别与用法详解
Oct 10 Python
Python 忽略warning的输出方法
Oct 18 Python
python+opencv实现阈值分割
Dec 26 Python
django中的数据库迁移的实现
Mar 16 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验证码类(分享)
2013/08/06 PHP
解析isset与is_null的区别
2013/08/09 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
TP5框架使用QueryList采集框架爬小说操作示例
2020/03/26 PHP
js的event详解。
2006/09/06 Javascript
javascript concat数组累加 示例
2009/09/03 Javascript
Javascript学习笔记2 函数
2010/01/11 Javascript
网页中CDATA标记的说明
2010/09/12 Javascript
javascript基础知识大集锦(二) 推荐收藏
2011/01/13 Javascript
jQuery的学习步骤
2011/02/23 Javascript
关于onScroll事件在IE6下每次滚动触发三次bug说明
2011/09/21 Javascript
js将控件隐藏的方法及display属性介绍
2013/07/04 Javascript
利用Keydown事件阻止用户输入实现代码
2014/03/11 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
简介AngularJS中使用factory和service的方法
2015/06/17 Javascript
js对字符串进行编码的方法总结(推荐)
2016/11/10 Javascript
js常用DOM方法详解
2017/02/04 Javascript
javaScript嗅探执行神器-sniffer.js
2017/02/14 Javascript
js数据类型检测总结
2018/08/05 Javascript
微信小程序整合使用富文本编辑器的方法详解
2019/04/25 Javascript
解决layui弹框失效的问题
2019/09/09 Javascript
小程序自动化测试的示例代码
2020/08/11 Javascript
Python3实现并发检验代理池地址的方法
2016/09/18 Python
python批量设置多个Excel文件页眉页脚的脚本
2018/03/14 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
pymysql 开启调试模式的实现
2019/09/24 Python
Pytorch 多块GPU的使用详解
2019/12/31 Python
详解使用HTML5的classList属性操作CSS类
2017/10/13 HTML / CSS
有关爱国演讲稿
2014/05/07 职场文书
幼儿园清明节活动总结
2014/07/04 职场文书
十佳家长事迹材料
2014/08/26 职场文书
报效祖国演讲稿
2014/09/15 职场文书
人大代表选举标语
2014/10/07 职场文书
2015年信访工作总结
2015/04/07 职场文书
刑事撤诉申请书
2015/05/18 职场文书