python中的迭代器Iterator

来源:互联网 发布:xd是什么软件 编辑:程序博客网 时间:2024/06/07 23:18

迭代器是来帮助我们记录每次迭代访问到的位置,当我们对迭代器使next()函数的时候,迭代器会向我们返回它所记录位置的下⼀个位置的数据。实际上,在使⽤next()函数的时候,调⽤的就是迭代器象的    __next__   ⽅法(Python3中是对象的    __next__   ⽅法,Python2中是对象的next()⽅法)。所以,我们要想构造个迭代器,就要实现它的    __next__    ⽅法。但这还不够,python要求迭代器本身也是可迭代的,所以我们还要为迭代器实现    __iter__   ⽅法,⽽    __iter__   ⽅法要返回⼀个迭代器,迭代器⾃身正是⼀个迭代器,所以迭代器的    __iter__   ⽅法返回⾃身即可。

个实现了    __iter__   ⽅法和    __next__   ⽅法的象,就是迭代器

class    MyList(object):

            """⾃定义的⼀个可迭代对象"""               

          def    __init__(self):                                

                    self.items    =    []

def    add(self,    val):

self.items.append(val)

def    __iter__(self):                               

                    myiterator    =    MyIterator(self)                               

                   return    myiterator

class    MyIterator(object):

             """⾃定的供上⾯可迭代象使⽤的⼀个迭代器"""               

           def    __init__(self,    mylist):                               

                    self.mylist    =    mylist

#    current⽤来记录当前访问到的位置                                

self.current    =    0

def    __next__(self):

if    self.current    <    len(self.mylist.items):                                               

            item    =    self.mylist.items[self.current]                                                                                         

            self.current    +=    1                                                

              return    item                                

else:                                               

             raise    StopIteration

def    __iter__(self):                              

          return    self

if    __name__    ==    '__main__':

mylist    =    MyList()               

          mylist.add(1)                

          mylist.add(2)                

          mylist.add(3)               

          mylist.add(4)               

          mylist.add(5)               

 for    num   in    mylist

           print(num)


如何判断个对象是否是迭代器

可以使   isinstance()   判断⼀个象是否是    Iterator   对象:

In    [56]:   from    collections   import    Iterator

In   [57]:   isinstance([],    Iterator)

Out[57]:   False

In    [58]:    isinstance(iter([]),    Iterator)

Out[58]:   True

In    [59]:    isinstance(iter("abc"),   Iterator) Out[59]:   True


原创粉丝点击