完善迭代器

 

 

一、使用两个对象创建一个可被for循环遍历的迭代器

 

  1、要求:使用两个对象自定义一个可以被for循环遍历的迭代器

 

  2、注意事项:

    a、Demo类中的【__iter__】方法中返回的迭代器引用

        并将当前类对象当作参数传入到迭代器中。

      作用:可将Demo类中的数据引用传入至ClassIterator类中使用。

 

    b、ClassIterator类中的要定义一个【__init__】方法,用于接收Demo类传入过来的引用。

 

    c、为了能使用for循环正常遍历,ClassIterator类中的【__next__】方法中、

      需要使用if语句进行判断是否下标越界。

 

    d、最后要主动抛出StopIteration异常,用于for循环取值后停止遍历。

 

    e、示例

    

class Demo(object):
    def __init__(self):
        self.names = list()
    
    def add(self, name):
        self.names.append(name)

    def __iter__(self):
        return ClassIterator(self)  # 返回一个迭代器引用,并将obj当作参数传递


class ClassIterator(object):

    def __init__(self, obj):
        self.obj = obj
        self.current_num = 0  # 设定下标的初始值

    def __iter__(self):
        pass

    def __next__(self):
        if self.current_num < len(self.obj.names):  # 判断是否下标越界
            ret = self.obj.names[self.current_num]  # 取值
            self.current_num += 1  # 每取一次值,下标进行加1操作
            return ret  # 返回取到的值,可通过next函数或for循环遍历取到值

        else:
            raise StopIteration  # 主动抛出StopIteration异常



obj = Demo()

# 向列表中添加数据
obj.add("hw")
obj.add("lhq")
obj.add("xz")

# 使用for循环遍历obj对象,进行取值。
for name in obj:
    print(name)
View Code

运行结果:

hw

lhq

xz

 

二、使用一个对象创建一个可被for循环遍历的迭代器(重点)

 

  1、要求:使用一个对象自定义一个可以被for循环遍历的迭代器

  

  2、注意事项:

    a、Demo类中的【__iter__】方法中返回的迭代器引用中要传入【self】。

    作用:可将Demo类中的数据引用传入至ClassIterator类中使用。

 

     b、ClassIterator类中的要定义一个【__init__】方法,用于接收Demo类传入过来的引用。

 

     c、为了能使用for循环正常遍历,ClassIterator类中的【__next__】方法中、

      需要使用if语句进行判断是否下标越界。

  

    d、最后要主动抛出StopIteration异常,用于for循环取值后停止遍历。

 

  3、示例

  

  

class Demo(object):
    def __init__(self):
        self.names = list()
        self.current_num = 0
    
    def add(self, name):
        self.names.append(name)

    def __iter__(self):
        return self  # 返回对象自己


    def __next__(self):
        if self.current_num < len(self.names):  # 判断是否下标越界
            ret = self.names[self.current_num]  # 取值
            self.current_num += 1  # 每取一次值,下标进行加1操作
            return ret  # 返回取到的值,可通过next函数或for循环遍历取到值

        else:
            raise StopIteration  # 主动抛出StopIteration异常



obj = Demo()

# 向列表中添加数据
obj.add("hw")
obj.add("lhq")
obj.add("xz")

# 使用for循环遍历obj对象,进行取值。
for name in obj:
    print(name)
View Code

 

运行结果:

hw

lhq

xz

 

posted @ 2021-01-21 17:42  御姐玫瑰  阅读(107)  评论(0编辑  收藏  举报
levels of contents