对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编写的com组件发生R6034错误的原因与解决办法
Apr 01 Python
python中的函数用法入门教程
Sep 02 Python
Django中反向生成models.py的实例讲解
May 30 Python
python中dict字典的查询键值对 遍历 排序 创建 访问 更新 删除基础操作方法
Sep 13 Python
详谈Python 窗体(tkinter)表格数据(Treeview)
Oct 11 Python
python算法题 链表反转详解
Jul 02 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
详解使用python3.7配置开发钉钉群自定义机器人(2020年新版攻略)
Apr 01 Python
Python实现将元组中的元素作为参数传入函数的操作
Jun 05 Python
TensorFlow中如何确定张量的形状实例
Jun 23 Python
用python制作个视频下载器
Feb 01 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 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设计模式 php实现适配器模式
2015/12/07 PHP
php如何执行非缓冲查询API
2016/07/22 PHP
详解php中空字符串和0之间的关系
2016/10/23 PHP
php array_reverse 以相反的顺序返回数组实例代码
2017/04/11 PHP
PHP实现登录验证码校验功能
2018/05/17 PHP
基于Jquery的简单&简陋Tabs插件代码
2010/02/09 Javascript
!DOCTYPE声明对JavaScript的影响分析
2010/04/12 Javascript
Javascript 面向对象 继承
2010/05/13 Javascript
Javascript 面试题随笔
2011/03/31 Javascript
js函数中onmousedown和onclick的区别和联系探讨
2013/05/19 Javascript
屏蔽相应键盘按钮操作
2014/03/10 Javascript
js中数组排序sort方法的原理分析
2014/11/20 Javascript
jQuery中nextAll()方法用法实例
2015/01/07 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
JavaScript检测上传文件大小的方法
2015/07/22 Javascript
jquery实现Li滚动时滚动条自动添加样式的方法
2015/08/10 Javascript
使用vue编写一个点击数字计时小游戏
2016/08/31 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
js中作用域的实例解析
2017/03/16 Javascript
利用js将ajax获取到的后台数据动态加载至网页中的方法
2018/08/08 Javascript
浏览器事件循环与vue nextTicket的实现
2019/04/16 Javascript
Swiper.js实现移动端元素左右滑动
2019/09/08 Javascript
vue 实现模糊检索并根据其他字符的首字母顺序排列
2019/09/19 Javascript
vue quill editor 使用富文本添加上传音频功能
2020/01/14 Javascript
[43:51]2014 DOTA2国际邀请赛中国区预选赛 Dream Times VS TongFu
2014/05/22 DOTA
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
Pytorch之parameters的使用
2019/12/31 Python
Python使用docx模块实现刷题功能代码
2020/02/13 Python
Pycharm中import torch报错的快速解决方法
2020/03/05 Python
Jupyter加载文件的实现方法
2020/04/14 Python
HTML5 embed标签定义和用法详解
2014/05/09 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
html5 冒号分隔符对齐的实现
2019/07/31 HTML / CSS
艺术用品:Arteza
2018/11/25 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题