python中迭代器和生成器的区别,python中迭代器的作用
什么是Python迭代器?
迭代器:迭代器可以看作是一个特殊的对象,每次被调用都会返回它的下一个元素。从实现的角度来看,迭代器对象必须是定义了_ _ iterator _ _()方法和next()方法的对象。
1.Python的Iterator对象表示一个数据流,可以看作一个有序序列,但是我们无法提前知道序列的长度,所以Iterator的计算比较懒,只有在需要返回下一个数据的时候才会计算。
2.Iterator对象可以被next()函数调用,并一直返回下一个数据,直到没有数据时抛出StopIteration错误。
相关:《Python入门教程》
3.所有可迭代对象都可以通过内置函数iterator()转换成迭代器。__iter__()方法是让对象在迭代for … in时找到数据对象的位置,next()方法是让对象通过next(实例名)访问下一个元素。除了接下来调用内置函数,可以判断是否是迭代器,也可以通过集合中的迭代器类型来判断。比如isinstance( ,Iterator)可以确定一个字符串类型是否是迭代器。注意:虽然list、dict和str是可迭代的,但它们不是迭代器。
4.迭代器的优点:节省内存(循环过程中不需要一次读入数据,这在处理文件对象时特别有用,因为文件也是迭代器对象),独立于索引取值,实现懒惰计算(必要时取值计算)。
示例:通过迭代器访问文件
forlineinopen("test.txt"):
Print(line)以便每次读取时输出一行,而不是一次读取整个文件,这样可以节省内存。
5.迭代器的使用是有限制的:数据只能一个一个的访问,访问过的数据不能再访问。遍历一次就不能访问任何数据。
示例:
l=[1,2,3,4]
I=iter(l)#从列表list生成迭代器I
List(i)#将迭代器内容转换成一个列表并输出[1,2,3,4]
List(i)#将迭代器内容再次转换为列表,在for循环中访问输出[]:
i=iter(l)
福基尼:
打印(k)#输出1、2、3、4
福基尼:
Print(k)#循环中再次没有输出。如果需要解决这个问题,可以单独定义一个iterable对象,每次访问前从iterable对象重新生成迭代器对象和迭代器对象;
6.迭代器取出所有元素后,再次调用next会抛出StopIteration异常。这不是发生错误,而是告诉外部调用方迭代已经完成。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。