迭代器协议和for循环工作机制
Posted hui147258
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器协议和for循环工作机制相关的知识,希望对你有一定的参考价值。
一 递归和迭代
递归:
迭代:被for循环方法
二 什么是迭代器协议
1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个Stoplteration异常,以终止迭代(只能往后走不能往前退) 例如:生孩子
2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个_iter_()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python中的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象
三 python中强大的for循环机制
for循环的本质:循环所有对象,全都是使用迭代器协议。
(字符串,列表,元祖,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环式,调用了他们内部的_iter_方法,把他们变成了可迭代对象
然后for循环调用可迭代对象的_next_方法去取值,而且for循环会捕捉Stoplteration异常,以终止迭代
1 l=[‘a‘,‘b‘,‘c‘] 2 一下表方式访问 3 print(l[0]) 4 print(l[1]) 5 print(l[2]) 6 #print(l[3]) #超出边界报错:IndexError 7 8 #二 遵循迭代器协议访问方式 9 l=[‘a‘,‘b‘,‘c‘] 10 diedai_l=l.__iter__() 11 print(diedai_l.__next__()) 12 print(diedai_l.__next__()) 13 print(diedai_l.__next__()) 14 #print(diedai_l.__next__()) #超出边界报错:StopIteration 15 16 #三for循环访问方式 17 #for循环本质就是遵循迭代器协议的访问方式,先调用 diedai_l=l.__iter__()方法, 18 #或者直接 diedai_l=iter(l),然后依次执行 diedai_l.next(),直到for循环捕捉到 StopIteration终止循环 19 #for 循环所有对象的本质是一样的原理 20 l=[‘a‘,‘b‘,‘c‘] 21 for i in l: #diedai_l=l.__iter__() 22 print(i) #i=diedai_l.next() 23 24 25 #四.用 while 去模拟for循环做的事情 26 l=[‘a‘,‘b‘,‘c‘] 27 28 diedai_l=l.__iter__() 29 while True: 30 try: 31 print(diedai_l.__next__()) 32 except StopIteration: 33 print(‘迭代完毕了,循环终止了‘) 34 break
以上是关于迭代器协议和for循环工作机制的主要内容,如果未能解决你的问题,请参考以下文章