迭代器——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. 捕捉异常结束循环

posted @ 2018-12-03 15:38  WenChen-0o0  阅读(109)  评论(0编辑  收藏  举报