一、迭代器定义
迭代器指的就是迭代取值的工具
迭代是一个重复的过程,但不是单纯的重复,每次重复都是基于上一次的结果的而进行的
二、为何要用迭代器
1、为了找到一种通用的迭代取值方案
2、为了节省内存
三、可迭代对象和迭代器对象
内置有__iter__方法的类型都称之为可迭代的对象,
但凡调用了__iter__方法,就会将该类转换成迭代器对象。
四、迭代器对象的特点:
1、内置有__next__方法
2、内置有__iter__方法 ==> for循环
迭代器优缺点:
优点:
1、提供了一种不依赖于索引一种通用迭代取值方案
2、惰性计算,节省内存
缺点:
1、取值麻烦
2、无法预测值的长度
3、一次性的
"hello".__iter__
[].__iter__
(11,).__iter__
{"k1":111}.__iter__
{11,22}.__iter__
f=open("a.txt",mode='wt')
f.__iter__
l=[11,22,33]
iter_l=l.__iter__()
print(iter_l.__next__())
print(iter_l.__next__())
print(iter_l.__next__())
info={'name':"egon","age":18,"gender":"male"}
iter_info=info.__iter__()
print(iter_info.__next__())
print(iter_info.__next__())
print(iter_info.__next__())
print(iter_info.__next__())
l=[11,222,333,444,555]
l={'name':"egon","age":18,"gender":"male"}
iter_l=iter(l)
while True:
try:
print(next(iter_l))
except StopIteration:
break
print('________________')
iter_l=iter(l)
while True:
try:
print(next(iter_l))
except StopIteration:
break
l=[11,222,333,444,555]
iter_l=iter(l)
for item in iter_l:
print(item)
print('====================')
for item in iter_l:
print(item)
五、for循环原理
1、调用可迭代对象.__iter__(),拿到一个迭代器对象
2、调用next(迭代对象),将返回值赋值变量item
3、循环往复,直到抛出异常Stopiteration,for会检测异常然后结束循环
f=open('a.txt',mode='rt',encoding='utf-8')
for line in f:
print(line)
print('======')
for line in f:
print(line)
f.close()