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