迭代器

迭代器协议:对象必需有一个next方法,执行该方法时返回迭代中的下一项,或者引起一个StopIteration异常,以终止迭代。

可迭代对象:实现了迭代器协议的对象,(对象内部定义一个__iter__()方法)

 

迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。

迭代器只能往前不会后退优点是不要求事先准备好整个迭代过程中所有的元素。

迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后,元素可以不存在或者被销毁。这个特点使得它特别适合用于遍历一些巨大的或是无限的集合,比如几个G的文件

特点:

1、访问者不需要关心迭代器内部的结构,仅需通过next()方法不断去取下一个内容

不能随机访问集合中的某个值 ,

2、只能从头到尾依次访问

3、访问到一半时不能往回退

4、便于循环比较大的数据集合,节省内存

 

 

for循环是基于迭代器协议提供的一个遍历所有对象的方法

      1、先调用对象的__iter__()方法,将对象变成迭代器

      2、根据迭代协议进行遍历

 

# # for遍历
# lst = list("xiaolyang")  # ['x', 'i', 'a', 'o', 'l', 'y', 'a', 'n', 'g']
# print(lst)
# for i in lst:  # x i a o l y a n g
#     print(i,end=' ')
#

# iter将对象变成可迭代对象 help(iter)
lst = list("xiao")  # ['x', 'i', 'a', 'o']
# lst_iter = iter(lst)  # list_iterator object
lst_iter = lst.__iter__()  # list_iterator object 与上一条代码
print(lst_iter.__next__()) # x
print(next(lst_iter))  # 内置函数
print(lst_iter.__next__()) # i
print(lst_iter.__next__()) # a
# print(lst_iter.__next__()) # o
# print(lst_iter.__next__()) # StopIteration
View Code

 

posted @ 2018-08-16 09:18  李小样  阅读(88)  评论(0编辑  收藏  举报