python中的迭代器有什么用
Python迭代器是什么?
迭代器(Iterator):迭代器可以看作是一个特殊的对象。每次调用对象时,它都会返回其下一个元素。从实现的角度来看,迭代器对象必须定义__iter__()方法和next()方法的对象。
1、Python的Iterator对象表示数据流,可以看作是有序列,但我们不能提前知道序列的长度,因此Iterator的计算是惰性的,只有在需要返回下一个数据时才能计算。
2、Iterator对象在没有数据的情况下抛出Stopiteration错误之前,可以被next()函数调用并返回下一个数据。
相关推荐:Python入门教程
3、所有Iterable可迭代对象都可以通过内置函数iter()转换为迭代器iterator。__iter__( )方法是让对象可以使用for … In循环遍历时找到数据对象的位置,next( )方法是让对象通过next(实例名)访问下一个元素。除了通过内置函数next调用来判断是否是迭代器外,还可以通过collection中的iterator类型来判断。例如: isinstance(’’, Iterator)可判断字符串类型是否迭代。注: list、dict、虽然str是Iterable,但不是Iterator。
4、迭代器的优点:节省内存(数据不需要在循环过程中一次读取,因为文件也是迭代器对象,在处理文件对象时特别有用)、不依赖索引值,实现惰性计算(需要时再计算值)。
例如:以迭代器的形式访问文件
forlineinopen(“test.txt”): print(line)
通过这种方式,每次读取一行时输出一行,而不是一次读取整个文件,节省内存。
5、迭代器的使用有限:只能一个接一个地访问数据,无法再次访问已访问的数据,无数据可以在一次遍历访问后访问。
举例:
l=[1,2,3,4] i=iter(l)#迭代器i代从list列表生成 list(i)#将迭代器内容转换为列表,输出[1、2、3、4] list(i)#将迭代器内容再次转换为列表,输出[]
for循环访问:
i=iter(l) forkini: print(k)#输出1、2、3、4 forkini: print(k)#再循环没有输出
如需解决此问题,可分别定义可迭代对象,并在每次访问前从可迭代对象重新生成和迭代对象;
6、迭代器在取出所有元素后再次调用next时,会抛出Stopiteration异常,这不是错误的,而是告诉外部调用器迭代已经完成。