Python迭代器

一 什么是迭代器协议

1迭代器协议:对象必须提供一个next()方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代(只能往前,不能退后)!!!

2可迭代对象:实现了迭代器协议的对象(如何实现迭代器协议,对象内部中的_iter_()方法)

3协议是一种约定,可迭代对象实现了迭代器协议,Python的内部函数工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象!!!

二Python中强大的for循环机制

for循环的本质,循环所有对象,都是使用迭代器协议

(字符串str,列表list,元组tunple,字典dict,,集合set,文件对象)这些都不是可迭代对象,是for循环,调用了他们的内部的_iter_方法,把他们变成了可迭代对象,(补充:为什么str,list,tunple可以有下标,例如list[0],因为他们是有序的)

for循环把他们变成了可迭代对象后,就调用可迭代对象的_next()_方法去取值,而且for循环会捕获StopIteration异常,以终止迭代!!!

 

l1 = [2,4,6,8,10] #定义l1列表
i_l1 = l1.__iter__() #把l1列表这个对象调用_iter_方法变成一个可迭代对象
print(i_l1) #打印结果是:<list_iterator object at 0x00000000029BD860>(一个可迭代的list对象)迭代器能节省内存!

 

#可迭代对象就有_netx_方法,如果超出了边界,就会捕获StopIteration
print(i_l1.__next__())
print(i_l1.__next__())
print(i_l1.__next__())
print(i_l1.__next__())
print(i_l1.__next__())
print(i_l1.__next__())
#输出结果是:
2
4
6
8
10
Traceback (most recent call last):
  File "D:/py_files/my_first_py3/test1/test_1.py", line 377, in <module>
    print(i_l1.__next__())
StopIteration

 

posted on 2019-04-30 17:35  詹生  阅读(656)  评论(0编辑  收藏  举报

导航