迭代器(Iterator):迭代器可以看作是一个特殊的对象,每次调用该对象时会返回自身的下一个元素,从实现上来看,一个迭代器对象
必须是定义了__iter__()方法和next()方法的对象。
Python的Iterator对象表示一个数据流,可以看成是一个有序的序列,但是我们无法提前知道序列的长度,所以Iterator
计算是惰性的,只有在需要返回下一条数据时才会计算; Iterator对象可以被next()函数调用,继续返回下一个数据,直到没有数据为止
引发 StopIteration 错误;所有 Iterable 可迭代对象都可以通过内置函数 iter() 转换为迭代器。 __iter__( ) 方法是使对象可用
for ... in 循环查找数据对象的位置,next() 方法允许对象通过next(实例名)访问下一个元素。除了调用内置函数next之外,还可以
除了判断是否为迭代器外,还可以通过集合中的Iterator类型来判断。例如:isinstance('', Iterator) 可以判断字符串类型是否为迭代器。笔记
含义:虽然 list、dict 和 str 是 Iterables,但它们不是 Iterators。迭代器的优点:节省内存(循环过程中,不需要一次性读取数据,尤其是处理文件对象时
有用,因为文件也是迭代器对象)、不依赖索引取值、实现惰性计算(需要时再取值计算);
举例:用迭代器的方式访问文件
for line in open(“test.txt”):print(line)
这样每读取一行就输出一行,而不是一次读取整个文件,节省内存。迭代器的使用有限制:数据只能一个一个地向前访问,并且数据已经被访问过
数据无法再次访问、遍历访问一次后再访问无数据
举例:
l = [1,2,3,4]
i=iter(l) #从list列表生成迭代器i
list(i) #将迭代器内容转换成列表,输出[1,2,3,4]
list(i) #将迭代器内容再次转换成列表,输出[]
用for循环访问:
i=iter(l)
for k in i:print(k) #输出1、2、3、4
for k in i:print(k) #再次循环没有输出
如果需要解决这个问题,可以单独定义一个可迭代对象,在每次访问前从可迭代对象中重新生成可迭代对象和迭代器对象;迭代器是当所有元素都被取出时
后再次调用next就会抛出一个StopIteration异常,这并不是错误的发生,而是告诉外部调用者迭代完成了。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ Python break 用法详解10/10
- ♥ Python如何读取pdf中的图片09/21
- ♥ \t在python中代表什么08/18
- ♥ 如何在python中将数据框转换为ndarray?09/18
- ♥ Python中类的继承是什么10/31
- ♥ Python 基础知识:迭代器以及如何使用它们12/24
内容反馈