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

    一、协程

      1、协程是Python语言独有的一种多任务方式。

      2、使用gevent模块实现协程。

      3、协程的实现过程(步骤)

        迭代器

        生成器

        yield

        greenlet

         gevent

    二、迭代器

      1、迭代的定义: 在原有的基础之上添加新的功能。

      2、迭代对象的定义:即一个对象中有包含了【__iter__】的方法。

      3、迭代器的定义:

        即:一个对象中既包含了【__iter__】方法,又包含了【__next__】方法

        通过它可以用来节省内存空间,并且能够知道将来生成数据的方式

      4、判断一个数据类型是否可以迭代:

        说明:

          a、通过【isinstance】语句用于判断一个对象是否由一个类创建的。

            返回一个布尔值:是则返回True,不是则返回False。

            语法:  

             isinstance(对象, 类)

              # True:属于

              # False:不属于

          b、判断这个数据类型对象是否是属于【Iterable】类的子类。

            语法:

              

              from collections import Iterable

              isinstance(迭代对象, Iterable)

              # True:属于

              # False:不属于

         c、示例

           

    from collections import Iterable
    
    # 1. 判断列表
    list_ret = isinstance([1, 2, 3], Iterable)
    print(f"列表:{list_ret}")
    
    # 2. 判断元组
    list_ret = isinstance((1, 2, 3), Iterable)
    print(f"元组:{list_ret}")
    
    # 3. 判断字符串
    list_ret = isinstance("huangwei", Iterable)
    print(f"字符串:{list_ret}")
    
    # 4. 判断数字
    list_ret = isinstance(100, Iterable)
    print(f"数字:{list_ret}")
    View Code

      运行结果:

      

      列表:True

      元组:True

      字符串:True

      数字:False

        

      4、可迭代对象

         a、成为可迭代对象的条件类中必须要有【__iter__】方法。

         

       要求:自定义一个可迭代对象  

    from collections import Iterable
    
    
    class Demo(object):
        def __init__(self):
            self.names = list()
        
        def add(self, name):
            self.names.append(name)
    
    
    obj = Demo()
    obj.add(100)
    obj.add(200)
    obj.add(300)
    
    print(f"判断obj对象是否为可迭代对象:{isinstance(classmate, Iterable)}")
    View Code

    运行结果:判断obj对象是否为可迭代对象:False

    可迭代对象示例代码

    from collections import Iterable
    
    
    class Demo(object):
        def __init__(self):
            self.names = list()
        
        def add(self, name):
            self.names.append(name)
    
        def __iter__(self):
            pass
    
    
    obj = Demo()
    obj.add(100)
    obj.add(200)
    obj.add(300)
    
    print(f"判断obj对象是否为可迭代对象:{isinstance(classmate, Iterable)}")
    View Code

    运行结果:判断obj对象是否为可迭代对象:True

      5、使用for循环的条件

        a、判断一个对象可以使用for循环的条件

          

        b、for循环的执行原理:

          

          1、被循环的对象是否可以迭代,即:类中必须有【__iter__】方法    

          2、在【__iter__】方法中必须要返回一个引用:迭代器。

          即:该迭代器中必须具有【__iter__方法】和【__next__方法】。

          3、迭代器中必须包含【__iter__】方法和【__next__】方法。

          4、通过这个迭代器的引用,for循环将调用该引用中的【__next__】的返回值

            即:使用【for 变量 in 可迭代对象】语句时,

           打印变量的值得到的是迭代器中【__next__】方法的返回值

     

        c 、演示:

          示例1:创建一个可以被for循环遍历的类。

          

    class Demo(object):
        def __init__(self):
            self.names = list()
        
        def add(self, name):
            self.names.append(name)
    
        def __iter__(self):
            return ClassIterator()  # 返回一个迭代器
    
    
    class ClassIterator(object):
        def __iter__(self):
            pass
    
        def __next__(self):
            pass
    
    
    obj = Demo()
    
    # 通过iter函数可查看obj对象的__iter__方法的返回值。
    print(iter(obj))  
    View Code

      运行结果:

      

     

          

          示例2:查看一个对象是否为迭代器,并通过【next】方法取到可迭代对象中的值。

           

          运行结果:

          

     

    from collections import Iterator
    
    
    class Demo(object):
        def __init__(self):
            self.names = list()
    
        def add(self, name):
            self.names.append(name)
    
        def __iter__(self):
            return ClassIterator()
        
    
    class ClassIterator(object):
        def __iter__(self):
            pass
    
        def __next__(self):
            return 100
    
    
    obj = Demo()
    demo_iterator = iter(obj)
    
    # 1. 判断obj对象是否为可迭代对象
    print(f"obj对象是否为可迭代对象:{isinstance(demo_iterator, Iterable)}")
    
    # 2. 判断demo_iterator对象是否为迭代器
    print(f"demo_iterator对象是否为迭代器:{isinstance(demo_iterator, Iterator)}")
    
    # 3. 通过next方法取值
    print(next(demo_iterator))
    View Code

     

        

        

  • 相关阅读:
    'static' can indeed be used in C++ to create a Static Member Function
    关闭QQ2008迷你首页
    开机无法使用欢迎屏幕
    关于U盘”无法复制:磁盘被写保护…”的解决办法
    SQL企业管理器下servers组下无项目解决方法
    COM+应用程序错误8004E00F COM+ 无法与Microsoft 分布
    安装Ms SQL Server 2005 开发版时出现性能计数器要求安装错误的解决办法
    牛人教你这样用Google
    在K3凭证处理中的部份实用操作
    KIS7.5SP2迷你版、标准版在查询数量金额明细账时提示“发生未知错误,系统当前操作被取消,请与金蝶公司的技术支持机构联系”
  • 原文地址:https://www.cnblogs.com/yujiemeigui/p/14309233.html
Copyright © 2011-2022 走看看