什么是Python迭代器?
迭代器:迭代器可以看作是一个特殊的对象。每次调用该对象时,它都会返回其下一个元素。从实现的角度来看,迭代器对象必须定义 __iter__() 方法和 next() 方法的对象。
1、Python的Iterator对象表示一个数据流,可以看成是一个有序的序列,但是我们无法提前知道序列的长度,所以Iterator的计算是偷懒的,只有在需要返回下一个的时候才可以只有当数据可用时才会计算。
2、Iterator对象可以被next()函数调用,不断返回下一个数据,直到没有数据时抛出StopIteration错误。
3.所有Iterable可迭代对象都可以通过内置函数iter()转化为迭代器。 __iter__()方法是让对象在用for ... in循环遍历时找到数据对象的位置,next()方法是让对象通过next(实例名称)。除了调用内置函数next判断是否为迭代器外,还可以通过集合中的Iterator类型来判断。例如:isinstance('', Iterator) 可以判断字符串类型是否为迭代器。注意:虽然 list、dict 和 str 是 Iterables,但它们不是 Iterators。
4、迭代器的优点:节省内存(循环过程中,不需要一次性读取数据,在处理文件对象时特别有用,因为文件也是迭代器对象),不依赖索引值,并实现惰性计算(需要时取值计算)。
举例:用迭代器的方式访问文件
for line in open(“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)
for k in i:
print(k) #输出1、2、3、4
for k in i:
print(k) #再次循环没有输出
如果需要解决这个问题,可以单独定义一个可迭代对象,在每次访问前从可迭代对象中重新生成可迭代对象和迭代器对象;
6、迭代器在取出所有元素并再次调用next时会抛出StopIteration异常。这不是错误,而是告诉外部调用者迭代已完成。
本文为原创文章,版权归知行编程网所有,欢迎分享本文,转载请保留出处!
你可能也喜欢
- ♥ 如何在python中获取字典的键08/30
- ♥ 如何设置 Python 字典按值排序?11/08
- ♥ Python中可以转换数组和矩阵吗?10/27
- ♥ python列表理解是什么意思?10/27
- ♥ python2.0和python3.0的区别。11/02
- ♥ 如何导入缺失的python标准库?12/06
内容反馈