0
点赞
收藏
分享

微信扫一扫

Python快速而美丽[v1.0.0][迭代器]


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

可迭代的对象

可以使用For循环的数据类型,其中一种是集合数据类型,如list、tuple、dict、set、str等;另一种则是生成器,可以直接作用于for循环的对象统称为可迭代的对象(Iterable),判断是否是可迭代对象:

>>> from collections import Iterable
>>> isinstance([], Iterable)
True

返回True则表明该对象是可迭代的。

迭代器

与普通的集合数据类型不同,生成器不但可以作用于for循环,还可以被​​__next__()​​​函数不断调用并返回下一个值,直到最后抛出StopIteration错误为止,那么,可以被​​__next__()​​函数调用并不断返回下一个值的对象称为迭代器(Iterator),判断是否是迭代器对象:

>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False

生成器都是Iterator对象,但list、dict、str虽然是可迭代对象,但不是迭代器,把list、dict、str等可迭代对象变成迭代器可以使用​​iter()​​函数

>>> isinstance(iter([]), Iterator)
True
>>> isinstance(iter('abc'), Iterator)
True

迭代器类

把一个类作为一个迭代器使用需要在类中实现两个方法 ​​__iter__()​​​与 ​​__next__()​​​,​​__iter__()​​​方法返回一个特殊的迭代器对象, 这个迭代器对象实现了​​__next__()​​​方法并通过 StopIteration 异常标识迭代的完成​​__next__()​​方法(Python 2 里是 next())会返回下一个迭代器对象。

class MyNumbers:
def __iter__(self):
self.a = 1
return self

def __next__(self):
if self.a <= 20:
x = self.a
self.a += 1
return x
else:
raise StopIteration

myclass = MyNumbers()
myiter = iter(myclass)

for x in myiter:
print(x)



举报

相关推荐

0 条评论