完善迭代器
一、使用两个对象创建一个可被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)
运行结果:
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)
运行结果:
hw
lhq
xz


                
            
        
浙公网安备 33010602011771号