对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正则匹配查询港澳通行证办理进度示例分享
Dec 27 Python
Python中的startswith和endswith函数使用实例
Aug 25 Python
Python 的描述符 descriptor详解
Feb 27 Python
flask + pymysql操作Mysql数据库的实例
Nov 13 Python
一份python入门应该看的学习资料
Apr 11 Python
对TensorFlow中的variables_to_restore函数详解
Jul 30 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
Nov 06 Python
Python设计模式之原型模式实例详解
Jan 18 Python
win8.1安装Python 2.7版环境图文详解
Jul 01 Python
使用python获取邮箱邮件的设置方法
Sep 20 Python
python 导入数据及作图的实现
Dec 03 Python
Scrapy实现模拟登录的示例代码
Feb 21 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 正则表达式小结
2009/08/31 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
PHP图形操作之Jpgraph学习笔记
2015/12/25 PHP
PHP利用二叉堆实现TopK-算法的方法详解
2017/04/24 PHP
JavaScript中“+=”的应用
2007/02/02 Javascript
IE 缓存策略的BUG的解决方法
2007/07/21 Javascript
Javascript-Mozilla和IE中的一个函数直接量的问题分析
2007/08/12 Javascript
javascript showModalDialog,open取得父窗口的方法
2010/03/10 Javascript
jQuery中的bind绑定事件与文本框改变事件的临时解决方法
2010/08/13 Javascript
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
Jquery Post处理后不进入回调的原因及解决方法
2014/07/15 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
jQuery实现HTML5 placeholder效果实例
2014/12/09 Javascript
JS中常用的正则表达式
2016/09/29 Javascript
jQuery向webApi提交post json数据
2017/01/16 Javascript
详解如何用模块化的方式写vuejs
2017/12/16 Javascript
angular json对象push到数组中的方法
2018/02/27 Javascript
JavaScript对JSON数组简单排序操作示例
2019/01/31 Javascript
vue实现Input输入框模糊查询方法
2021/01/29 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
2021/02/18 Vue.js
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
Python通过future处理并发问题
2017/10/17 Python
Python matplotlib 画图窗口显示到gui或者控制台的实例
2018/05/24 Python
python实现写数字文件名的递增保存文件方法
2018/10/25 Python
pycharm无法安装第三方库的问题及解决方法以scrapy为例(图解)
2020/05/09 Python
面临毕业的毕业生自荐书范文
2014/02/05 职场文书
机关党员2014全国两会学习心得体会
2014/03/10 职场文书
班级学习计划书
2014/04/27 职场文书
建筑施工安全生产责任书
2014/07/22 职场文书
2014光棍节单身联谊活动策划书
2014/10/10 职场文书
刑事附带民事诉讼答辩状
2015/05/22 职场文书
预备党员考察意见范文
2015/06/01 职场文书
三好学生主要事迹材料
2015/11/03 职场文书
2016年重阳节慰问信
2015/12/01 职场文书
Python基础之常用库常用方法整理
2021/04/30 Python
企业版Windows 11有哪些新功能? Win11适用于企业的功能介绍
2021/11/21 数码科技