对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读取mp3中ID3信息的方法
Mar 05 Python
python下载文件时显示下载进度的方法
Apr 02 Python
python实现用户登录系统
May 21 Python
Python只用40行代码编写的计算器实例
May 10 Python
基于Python socket的端口扫描程序实例代码
Feb 09 Python
详谈在flask中使用jsonify和json.dumps的区别
Mar 26 Python
selenium+python实现自动登录脚本
Apr 22 Python
python 从csv读数据到mysql的实例
Jun 21 Python
python django model联合主键的例子
Aug 06 Python
Python 实现数组相减示例
Dec 27 Python
python计算导数并绘图的实例
Feb 29 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
Sep 20 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时间不正确的解决方法
2008/04/09 PHP
浅析php插件 HTMLPurifier HTML解析器
2013/07/01 PHP
php开启与关闭错误提示适用于没有修改php.ini的权限
2014/10/16 PHP
PHP验证信用卡卡号是否正确函数
2015/05/27 PHP
非集成环境的php运行环境(Apache配置、Mysql)搭建安装图文教程
2016/04/12 PHP
分享一个漂亮的php验证码类
2016/09/29 PHP
strpos() 函数判断字符串中是否包含某字符串的方法
2019/01/16 PHP
javascript控制swfObject应用介绍
2012/11/29 Javascript
JQuery入门—JQuery程序的代码风格详细介绍
2013/01/03 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
用NODE.JS中的流编写工具是要注意的事项
2016/03/01 Javascript
深入理解Javascript中的valueOf与toString
2017/01/04 Javascript
使用Webpack提高Vue.js应用的方式汇总(四种)
2017/07/10 Javascript
vue将时间戳转换成自定义时间格式的方法
2018/03/02 Javascript
手写Node静态资源服务器的实现方法
2018/03/20 Javascript
微信小程序wx.uploadfile 本地文件转base64的实现代码
2018/06/28 Javascript
解决vue数组中对象属性变化页面不渲染问题
2018/08/09 Javascript
Vue基础学习之项目整合及优化
2019/06/02 Javascript
jQuery操作事件完整实例分析
2020/01/10 jQuery
小程序跳转H5页面的方法步骤
2020/03/06 Javascript
[01:02]DOTA2辉夜杯决赛日 CDEC.Y对阵VG赛前花絮
2015/12/27 DOTA
Python help()函数用法详解
2014/03/11 Python
python友情链接检查方法
2015/07/08 Python
Python语言实现获取主机名根据端口杀死进程
2016/03/31 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
美国中西部家用医疗设备商店:Med Mart(轮椅、踏板车、升降机等)
2019/04/26 全球购物
比较基础的php面试题及答案-填空题
2014/04/26 面试题
人力资源管理专业自荐书范文
2014/02/10 职场文书
青年文明号复核材料
2014/02/11 职场文书
计算机专业求职信
2014/06/02 职场文书
2014年收银工作总结
2014/11/13 职场文书
2015最新学生自我评价范文
2015/03/03 职场文书
管理失职检讨书范文
2015/05/05 职场文书
MySQL库表名大小写的选择
2021/06/05 MySQL
vue+elementui 实现新增和修改共用一个弹框的完整代码
2021/06/08 Vue.js
OpenCV绘制圆端矩形的示例代码
2021/08/30 Python