Iterator,Iterable

来源:互联网 发布:mysql declare 赋值 编辑:程序博客网 时间:2024/05/18 15:08

Iterable(可迭代对象)是实现了__iter__方法的对象,其中__iter_需要返回一个Iterator对象。
Iterator(迭代器)是实现了 __iter__、__next__的对象,__iter__方法返回对象本身。

class Iterable:    def __iter__():        return Iterator()class Iterator:    def __init__():        self.start=-1    def __iter__():        return self    def __next__():        self.start +=1            if self.start >10:                raise StopIteration            return self.start

iter()会调用__iter__方法,next()调用__next__ 方法。
进行for in 循环时会先调用用iter()得到Iterator,然后不断调用Iterator的next(),实现迭代。

下面是collections模块中Iterable,Iterator的实现情况

>>> from collections import Iterable>>> help(Iterable)Help on class Iterable in module collections.abc:class Iterable(builtins.object) |  Methods defined here: | |  __iter__(self) |
>>> from collections import Iterator>>> help(Iterator)Help on class Iterator in module collections.abc:class Iterator(Iterable) |  Method resolution order: |      Iterator |      Iterable |      builtins.object | |  Methods defined here: | |  __iter__(self) | |  __next__(self) |      Return the next item from the iterator. When exhausted, raise StopIteration

迭代器是一次性消耗品,使用完了以后就空了,使用copy包中的deepcopy可以得到多个相同迭代器。

原创粉丝点击