zoukankan      html  css  js  c++  java
  • 完善迭代器

    一、使用两个对象创建一个可被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

  • 相关阅读:
    数据库范式
    SQL--使用NewID函数,创建GUID列
    初学Python
    Artificial intelligence(AI)
    Concurrency in csharp (Asynchronous, Parallel, and Multithreaded Programming)
    MySQL 5.7 create VIEW or FUNCTION or PROCEDURE
    csharp: Oracle Stored Procedure DAL using ODP.NET
    csharp: ODP.NET,System.Data.OracleClient(.net 4.0) and System.Data.OleDb读取Oracle g 11.2.0的区别
    csharp:ASP.NET SignalR
    csharp: MySQL Stored Procedure using DAL
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14309338.html
Copyright © 2011-2022 走看看