对Python中Iterator和Iterable的区别详解

yipeiwu_com5年前Python基础

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实现将字符串的首字母变为大写,其余都变为小写的方法

利用map()函数,把用户输入的不规范的英文名字,变为首字母大写,其他小写的规范名字。 思路:使用capitalize()函数将字符串的首字母转为大写,其余变为小写 L1 = ['A...

OpenCV2从摄像头获取帧并写入视频文件的方法

一段基于OpenCV2的代码。 作用是从摄像头获取帧并将帧写入指定的视频文件中。 需要注意的是,视频文件所在的路径需要存在,例如D:/images/1.avi。images这个目录需要存...

详解用TensorFlow实现逻辑回归算法

详解用TensorFlow实现逻辑回归算法

本文将实现逻辑回归算法,预测低出生体重的概率。 # Logistic Regression # 逻辑回归 #---------------------------------- #...

Python读写/追加excel文件Demo分享

三个工具包 python操作excel的三个工具包如下,注意,只能操作.xls,不能操作.xlsx。 • xlrd: 对excel进行读相关操作 • xlwt:...

对python生成业务报表的实例详解

对python生成业务报表的实例详解

本文介绍一个用python结合xlsxwriter自动生成业务报表的程序。这里的业务数据采用的是指定的值,真实情况下需要其他程序来接入数据。 # -*- coding: utf-8...