• 迭代器


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

  • 相关阅读:
    Mootools遮罩层练习(原为网上的jquery写法)
    Notepad++ c编译环境 64
    Apache添加多端口
    数据库权限分配(远程共享数据库)(mysql)
    Zend studio13 导入已有php文件夹
    按钮js跳转到非表单提交页
    Sql case when 小例
    php 获取数组中的key值
    knit使用安装 ecstore knit位置 及调用路径
    python数据库操作
  • 原文地址:https://www.cnblogs.com/lisen321/p/11867178.html
Copyright © 2020-2023  润新知