当前位置:   article > 正文

Python 迭代器

Python 迭代器

一、迭代器

迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

1.1 判断一个对象是否可迭代

可以使用 isinstance() 判断一个对象是否是 Iterable 对象:
In [50]: from collections import Iterable

In [51]: isinstance([], Iterable)
Out[51]: True

In [52]: isinstance({}, Iterable)
Out[52]: True

In [53]: isinstance('abc', Iterable)
Out[53]: True

In [54]: isinstance(mylist, Iterable)
Out[54]: False

In [55]: isinstance(100, Iterable)
Out[55]: False

1.2 可迭代对象的本质

我们分析对可迭代对象进行迭代使用的过程,发现每迭代一次(即在for...in...中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个“人”去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的“人”称为迭代器(Iterator)。
 
可迭代对象的本质就是可以向我们提供一个这样的中间“人”即迭代器帮助我们对其进行迭代遍历使用。
 
可迭代对象通过__iter__方法向我们提供一个迭代器, 我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据.
 
那么也就是说,一个具备了__iter__方法的对象,就是一个可迭代对象
 1 from collections import Iterable
 2 
 3 
 4 class MyList(object):
 5 
 6     def __init__(self):
 7         self.container = []
 8 
 9     def add(self, item):
10         self.container.append(item)
11 
12     def __iter__(self):
13         """返回一个迭代器"""
14         pass
15 
16 
17 mylist = MyList()
18 print(isinstance(mylist, Iterable))     # True

这回测试发现添加了__iter__方法的mylist对象已经是一个可迭代对象了

1.3 iter()函数和next()函数

list、tuple等都是可迭代对象,我们可以通过iter()函数获取这些可迭代对象的迭代器。然后我们可以对获取到的迭代器不断使用next()函数来获取下一条数据。iter()函数实际上就是调用了可迭代对象的__iter__方法。
>>> li = [11, 22, 33, 44, 55]
>>> li_iter = iter(li)
>>> next(li_iter)
11
>>>
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/179617
推荐阅读
相关标签
  

闽ICP备14008679号