什么是迭代器
迭代:指的是一个重复的过程,每次重复称为一次迭代,并且每次重复的结果是下一次重复的初始值
为什么要有迭代器
#对于序列类型: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.__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)