码迷,mamicode.com
首页 > 其他好文 > 详细

27、迭代器

时间:2017-08-18 00:27:19      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:ret   ext   ccf   else   size   []   list   源码   strong   

可迭代对象具有一个iter()方法,可迭代对象调用__iter__()方法以后返回一个迭代器对象。也就是说一个迭代器  具有iter 和next方法

以列表为例 a = [1,2,3,4]

     a.__iter__()   返回一个迭代器对象

     a.__iter__().__next__()  就可以进行迭代

for i  in list: 的本质就是一个迭代器,它做的就是首先找到一个迭代器对象,iteration = list.__iter__(),然后 iteration.__next__()进行迭代

一个迭代器的源码:

class MyList(object):

  def __init__(self):
    self.items = []

  def add(self, item):
    self.items.append(item)

  def __iter__(self):
    my_iterator = MyIterator(self.items)
      return my_iterator

 

class MyIterator(object):
  def __init__(self, container):
    self.i = 0
    self.container = container

  def __next__(self):
    if self.i < len(self.container):
      ret = self.container[self.i]
      self.i += 1
      return ret
    else:
      raise StopIteration

my_list = MyList()   这个对象就可以就可以进行迭代

my_list.add(100)

my_list.add(200)

for i in my_list:

  print i

27、迭代器

标签:ret   ext   ccf   else   size   []   list   源码   strong   

原文地址:http://www.cnblogs.com/lvhonglei-python/p/7385355.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!