码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-05-18 09:41:30      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:for   对象   next   int   原理   for循环   模拟   div   pre   

一 递归和迭代

递归:

迭代:被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循环工作机制

标签:for   对象   next   int   原理   for循环   模拟   div   pre   

原文地址:https://www.cnblogs.com/hui147258/p/10884558.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!