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

    1  可迭代对象

          内部含有__iter__方法的对象是可迭代对象

           遵循可迭代协议

     dir()   检查对象含有什么方法

        dir()会返回一个列表,这个列表中含有该对象的以字符串的形式所有方法名。这样

          我们就可以判断python中的一个对象是不是可迭代对象了

        print(dir("abc"))

      判断对象是否可迭代对象的方法

           方法一

            print('__iter__'in dir([1,2,3]))

                   通过成员运算符,返回bool值

            方法二

                 fromcollections.abc   import  lterable

                  print(isinstance(‘123’,lterable))

         isinstance  判断一个对象是什么类型,返回bool

       迭代器

            内部含有__iter__且__next__方法的就是迭代器

             可迭代对象通过__iter__()可以转换成迭代器,满足迭代器协议

            l = [1,2,3]

            l = _obj=l.__iter__()

       判断迭代器的方法

        第一种

               print('__next__'in dir(l_obj))

         第二种

              fromcollections.abcimport  lterator

              print(isinstance('123',lterator))

       迭代器的取值方法

            方法一

              print(l_obj._next_())一次取一个,超出范围会报错

           方法二   for 循环

              注意  实际上可迭代对象是不可以一个一个的一次取值的,因为他没有_next_方法

             

            for  循环提供一个机制

                   1 将可迭代对象转化成迭代器

                    2 利用_next_()进行取值

                     3 用try 异常处理方法防止报错

    迭代器特点

         1  节省内存

               上一条内存中会被释放

           2  满足惰性机制

                 next一次,取一个值,绝不过多取值

            3 取值过程不可逆(一条路走到黑)

        补充

                enumerate()枚举

                  返回元组,利用元组的拆包,分别返回序列的索引和值

                    enuumerate()对象是迭代器

     能放在for循环里的一定是可迭代对象

     迭代器一定是可迭代对象,但是可迭代对象不一定是迭代器

       学过的数据类型   int  bool   不可迭代

  • 相关阅读:
    使用nexus 管理pip 私有包
    gitingore && opensource license 自动生成的网站
    lua-resty-qless-web UI 界面运行
    自定义pip 包开发简单说明
    ethr 微软开源的tcp udp http 网络性能测试工具
    openresty 集成lua-resty-mail +smtp2http 扩展灵活的mail 服务
    masterlab 敏捷项目管理工具
    luarocks 自定义包发布试用
    vorpal 又一个方便的cli 开发包
    gogs wekan 集成试用
  • 原文地址:https://www.cnblogs.com/lisen321/p/11867178.html
Copyright © 2011-2022 走看看