D18-05 迭代器 生成器
1、迭代器协议:对象必须提供一个next方法,执行方法要么返回迭代中的下一项,要么就引一个stoplteration异常以终止迭代。(智能往后不能往前走)
2、可迭代对象:实现了迭代器协议的对象(如何实现 对象内部定义一个__iter__()方法)
3、协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max等)使用迭代器协议访问对象。
(字符串,列表,元组,字典,集合,文件对象)都不是可迭代对象,只不过在for循环形式,调用了他们内部__iter__()方法,把他们变成了可迭代对象。
然后for循环调用可迭代对象的next方法取值,而且for循环会捕捉stoplteration异常已终止迭代。
l = [1,2,3]
for i in l:
pass
a = l.__iter__() #先用内置方法转换
b = a.__next__() #在用next方法
print(b)
输出结果 1
l = [1,2,3] print(l[0]) iter_l = l.__iter__() #遵循迭代器协议,转换可迭代对象。 print(iter_l.__next__())
如果没有迭代器可以通过以下代码实现
l = [1,2,3]
index = 0
while index<len(l):
print(l[index])
index+=1
实际上的for循环的本质是通过以下方式来实现的两次转换iter ,next,通过except捕捉到异常 然后终止。
l = [1,2,3,4,5]
diedai = l.__iter__()
while True:
try:
print(diedai.__next__())
except StopIteration:
print('迭代完毕,循环终止')
break
打印结果:
1
2
3
4
5
迭代完毕,循环终止
补充
函数的内置方法
print(next(l._iter_))实际上是调用 iter_l._next_()

浙公网安备 33010602011771号