对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 相关文章推荐
linux下安装easy_install的方法
Feb 10 Python
python发送邮件示例(支持中文邮件标题)
Feb 16 Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 Python
python使用xslt提取网页数据的方法
Feb 23 Python
Java与Python两大幸存者谁更胜一筹呢
Apr 12 Python
python ChainMap 合并字典的实现步骤
Jun 11 Python
python 梯度法求解函数极值的实例
Jul 10 Python
wxpython布局的实现方法
Nov 01 Python
Python3.7实现验证码登录方式代码实例
Feb 14 Python
python GUI库图形界面开发之PyQt5图片显示控件QPixmap详细使用方法与实例
Feb 27 Python
python asyncio 协程库的使用
Jan 21 Python
Python入门之基础语法详解
May 11 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
德生1994机评
2021/03/02 无线电
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
如何用php生成扭曲及旋转的验证码图片
2013/06/07 PHP
PHP中鲜为人知的10个函数
2014/02/28 PHP
PHP Reflection API详解
2015/05/12 PHP
php实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
PHP中类属性与类静态变量的访问方法示例
2016/07/13 PHP
php 5.4 全新的代码复用Trait详解
2017/01/05 PHP
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
js用typeof方法判断undefined类型
2014/07/15 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
AngularJS基础 ng-init 指令简单示例
2016/08/02 Javascript
深入理解Node.js 事件循环和回调函数
2016/11/02 Javascript
javascript实现获取图片大小及图片等比缩放的方法
2016/11/24 Javascript
AngularJS中$http使用的简单介绍
2017/03/17 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
解决Vue.js 2.0 有时双向绑定img src属性失败的问题
2018/03/14 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
2020/12/10 Vue.js
[40:13]Ti4 冒泡赛第二天 iG vs NEWBEE 2
2014/07/15 DOTA
python进阶教程之循环对象
2014/08/30 Python
Python判断字符串与大小写转换
2015/06/08 Python
儿童学习python的一些小技巧
2018/05/27 Python
Python3.5 Pandas模块之Series用法实例分析
2019/04/23 Python
python基础教程之while循环
2019/08/14 Python
Python函数中的可变长参数详解
2019/09/12 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
Python中的sys.stdout.write实现打印刷新功能
2020/02/21 Python
Django更新models数据库结构步骤
2020/04/01 Python
使用python计算三角形的斜边例子
2020/04/15 Python
k-means 聚类算法与Python实现代码
2020/06/01 Python
Python学习之路之pycharm的第一个项目搭建过程
2020/06/18 Python
Python如何绘制日历图和热力图
2020/08/07 Python
中国医药集团国药在线:国药网
2017/02/06 全球购物
党性心得体会
2014/09/03 职场文书
Python 内置函数速查表一览
2021/06/02 Python