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   不可迭代

  • 相关阅读:
    使用Vue初始化项目的时候,一直download template的解决方案
    移动端复选框和单选框选中样式不能正常显示
    PC端360浏览器如何打开手机模式
    我在项目中是这样配置Vue的
    怎么取消微信pc端“保持微信窗口在最前面”设置?
    5个 Vuex 插件,给你的下个VueJS项目
    Vue+Element前端导入导出Excel
    前端快来!最火的 Vue.js 开源项目出炉
    1月12日学习日志
    1月9日学习日志
  • 原文地址:https://www.cnblogs.com/lisen321/p/11867178.html
Copyright © 2011-2022 走看看