13、迭代器

迭代器的介绍

迭代器是用来迭代取值的工具,每一次对过程的重复叫做迭代,每一次迭代是下一次迭代的初始值,简单来说,下一次迭代的值和上一次迭代的值有关

可迭代对象

通过索引的方式迭代取值,只适用于序列类型:字符串、列表、元组。对于没有索引的字典、集合等非序列类型,没有办法通过索引来取值
内置有__iter__方法的对象都是可迭代对象,字符串、列表、元组、字典、集合、打开的文件都是可迭代对象

迭代器对象

可迭代对象调用__iter__方法的返回值就是迭代器对象,调用可以有两种方式,一种是obj.iter,另外一种是iter(obj),两种方法等效
迭代器对象有__next__方法,同样可以通过next(obj)来调用,它的作用是取到迭代器对象的下一个值,如果没有值可以取,会抛出异常

s = {1, 2, 3}
i = s.__iter__()
print(i)
print(next(i))
print(next(i))
print(next(i))
next(i)     # 抛出异常

for循环原理
goods=['mac','lenovo','acer','dell','sony']
i=iter(goods) #每次都需要重新获取一个迭代器对象
while True:
    try:
        print(next(i))
    except StopIteration: #捕捉异常终止循环
        break

迭代器的优缺点

优点:
1、为序列和非序列类型提供了一种统一的迭代取值方式。
2、惰性计算:迭代器对象表示的是一个数据流,可以只在需要时才去调用next来计算出一个值,就迭代器本身来说,同一时刻在内存中只有一个值,因而可以存放无限大的数据流,而对于其他容器类型,如列表,需要把所有的元素都存放于内存中,受内存大小的限制,可以存放的值的个数是有限的。

缺点:
1、除非取尽,否则无法知道迭代器的长度
2、只能渠道下一个值,不能返回取到前面的值

posted @ 2021-08-15 14:33  晴天々⊙雨天  阅读(45)  评论(0)    收藏  举报