python 迭代器

什么是迭代:

迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值

为什么要有迭代器:

#对于序列类型:str,list,tuple,可以依赖索引来迭代取值
#但是对于dict,set,文件,python必须为我们提供一种不依赖于索引的迭代取值的方式=》迭代器

可迭代对象:(即内置有obj.__iter__()方法)

name="egon"
l=[1,2,3]
t=(1,2,3)
d={"name":"egon","age":18,"sex":"male"}
s={"a","b","c"}
f=open("file.txt","r",encoding="utf-8")

name.__iter__()     #字符串类型为可迭代对象;也可以写成name_iter=iter(name)
l.__iter__()          #列表类型为可迭代对象
t.__iter__()          #元组类型为可迭代对象
d.__iter__()          #字典类型为可迭代对象
s.__iter__()          #集合类型为可迭代对象
f.__iter__()          #文件类型为可迭代对象

迭代器对象:(即内置既有obj.__iter__()方法也有obj.__next__()方法)

文件对象本身即内置既有obj.__iter__()方法也有obj.__next__()方法是迭代器对象

调用obj.__iter__()方法

name="egon"
name_iter=name.__iter__()     #调用obj.__iter__()方法可以使可迭代对象变成迭代器对象
name_iter.__next__()

总结:

1、可迭代对象不一定是迭代器对象
2、迭代器对象一定是可迭代对象
3、调用obj.__iter__()方法,得到的是迭代器对象(对于迭代器对象,执行obj.__iter__()方法得到的仍然是它本身)

迭代器优点:

#优点:
1、提供一种统一的,不依赖于索引的取值方式,为for循环的实现提供了依据
2、迭代器同一时间在内存中只有一个值,==》更节省内存空间
#缺点:
1、只能往后取,并且是一次性的
2、不能统计值的个数,即长度

示例:

d={"name":"egon","age":18,"sex":"male"}
d_iter=d.__iter__()    #也可以写成d_iter=iter(d)
#迭代器d_iter没有值了,就会抛出异常StopIteration

while True:
    try:
        data=d_iter.__next__();  #也可以写成data=next(d_iter)
        print(d[data])
    except StopIteration:
        print("取值完毕")
        break

 for循环原理

#for循环的工作原理:for循环可以称之为叫迭代器循环
d={'a':1,'b':2,'c':3}

# 1、d.__iter__()得到一个迭代器对象
# 2、迭代器对象.__next__()拿到一个返回值,然后将该返回值赋值给k
# 3、循环往复步骤2,直到抛出StopIteration异常for循环会捕捉异常然后结束循环
# for k in d:
#     print(k)

 

posted @ 2020-03-24 15:38  耗油炒白菜  阅读(186)  评论(0编辑  收藏  举报