对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 相关文章推荐
Django框架下在视图中使用模版的方法
Jul 16 Python
在windows下Python打印彩色字体的方法
May 15 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
判断python对象是否可调用的三种方式及其区别详解
Jan 31 Python
通过python实现弹窗广告拦截过程详解
Jul 10 Python
pycharm 批量修改变量名称的方法
Aug 01 Python
Python获取时间范围内日期列表和周列表的函数
Aug 05 Python
python 数据提取及拆分的实现代码
Aug 26 Python
python数组循环处理方法
Aug 26 Python
Python FFT合成波形的实例
Dec 04 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
如何创建一个Flask项目并进行简单配置
Nov 18 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 时间time与日期date之间的使用详解及区别
2016/11/07 PHP
php如何修改SESSION的生存存储时间的实例代码
2017/07/05 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
DOM 基本方法
2009/07/18 Javascript
javascript 检测浏览器类型和版本的代码
2009/09/15 Javascript
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
JavaScript转换农历类实现及调用方法
2013/01/27 Javascript
Javacript实现颜色梯度变化和渐变的效果代码
2013/05/31 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
Vue.js路由vue-router使用方法详解
2017/03/20 Javascript
Vue动态获取width的方法
2018/08/22 Javascript
angular多语言配置详解
2019/05/16 Javascript
[00:12]2018DOTA2亚洲邀请赛 sylar表现SOLO技艺
2018/04/06 DOTA
python多线程threading.Lock锁用法实例
2014/11/01 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
浅谈django的render函数的参数问题
2018/10/16 Python
Python中使用pypdf2合并、分割、加密pdf文件的代码详解
2019/05/21 Python
Python imageio读取视频并进行编解码详解
2019/12/10 Python
如何给Python代码进行加密
2020/01/10 Python
css sprite简单实例
2016/05/23 HTML / CSS
蹦床仓库:Trampoline Warehouse
2018/12/06 全球购物
机械设计及其自动化专业推荐信
2013/10/31 职场文书
应届护士推荐信
2013/11/16 职场文书
法律七进实施方案
2014/03/15 职场文书
个人贷款担保书
2014/04/01 职场文书
公司任命书模板
2014/06/06 职场文书
孝老爱亲事迹材料
2014/12/24 职场文书
酒店销售经理岗位职责
2015/04/02 职场文书
公司市场部岗位职责
2015/04/15 职场文书
2015年质检工作总结
2015/05/04 职场文书
七一晚会主持词
2015/06/29 职场文书
2015年终个人政治思想工作总结
2015/11/24 职场文书
启迪人心的励志语录:脾气永远不要大于本事
2020/01/02 职场文书
vue前端工程的搭建
2021/03/31 Vue.js
MySQL GRANT用户授权的实现
2021/06/18 MySQL
《总之就是很可爱》新作短篇动画《总之就是很可爱~制服~》将于2022年夏天播出
2022/04/07 日漫