迭代器——day14
什么是迭代器
迭代器是一个重复的过程,但是但是没次重复都是基于上一次重复的结果而继续
#下列循环知识单纯的重复
while True:
print(1)
# 基于索引的迭代取值
l=['a','b','c']
i=0
while i < len(l):
print(l[i])
i+=1
什么是迭代器
迭代取值的工具
为什么要用迭代器
优点:
1.提供一种不依赖索引的迭代取值方式
2.更节省内存
缺点:
1.不如按照索引的取值方式灵活
2.取值一次性的,只能往后取无法预测值的个数
如何用迭代器
可迭代的对象:str\list\tuple\dict\set\文件对象
但凡内置有__iter__方法的对象都称之为可迭代对象
迭代器对象:文件对象
既内置有__iter__方法又内置有__next__方法的对象都称之为迭代器对象
调用可迭代对象__iter__方法,会有一个返回值,该返回值就是内置的迭代器对象
s='abcdef'
l=['a','b','c']
d={'k1':111,'k2':222,'k3':333}
# iter_d=d.__iter__()——#.__next__() 把转成可迭代类型
# print(iter_d)——#只输出一次
try:————检测以下内容是否报错
print(iter_d.__next__())——#.__next__() 把转成可迭代类型-输出取的第一个值
print(iter_d.__next__())——#.__next__() 把转成可迭代类型-输出取的第二个值
print(iter_d.__next__())——#.__next__() 把转成可迭代类型-输出取的第三个值
print(iter_d.__next__())——#没有值以后会报错
except StopIteration:————如果报的是StopIteration类型就执行下一句
print('取值完毕')
d={'k1':111,'k2':222,'k3':333}
d={1,2,3,4,5}
d=[1,2,3,4]
iter_d=d.__iter__()
iter_d=iter(d) ————上一句可以写成这样
print(next(iter_d)) #iter_d.__next__()
print(d.__len__())
print(len(d)) ————上一句可以写成这样
for循环的底层原理:
1. 调用in后面那个值/对象的__iter__方法,拿到一个迭代器对象iter_obj
2. 调用迭代器对象iter_obj.__next__()将得到的返回值赋值变量名k,循环往复直到取值完毕抛出异常StopIteration
3. 捕捉异常结束循环