迭代器协议和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循环工作机制的主要内容,如果未能解决你的问题,请参考以下文章

python-迭代器协议和for循环工作机制

迭代器协议和for循环工作机制

迭代器协议和for循环工作机制

迭代器协议和for循环工作机制

Python基础-----迭代器协议和For循环机制

第八篇 迭代器协议和生成器