迭代器(iterator):只要包含了‘双下iter'和__next__方法的对象

        名词 迭代器(能从其中一个一个取出值来)

                ’5654546jdkfljfjflkfj'

                 lst_iterator = [1,2,3].__iter__()

       可迭代对象:(含有__iter__方法的对象)

                    检测方法  1  form collections import Iterable

                               2 print(lsinstance(要检测的对象,Iterable))

        迭代器 :(含有__iter__和__next__方法的对象)

                   检测方法

                            1 form collections.import Iterator

                            2  pirnt(isinstance(要检测的对象,Iterable))

迭代器和可迭代对象 关系:

                      迭代器 = 可迭代对象.__iter__()

                     包函关系 

 

迭代器存在的本质:

          1 能够对python 中的基本数据类型进行统一

          2 它可以节省内存

        f = open('file','w') 文件句柄就是一个迭代器

        range(10000).__iter__()  range就是一个可迭代对象 

         '__iter__'这个方法导致了一个数据类型的可迭代

          所有能被for 循环的数据类型都是可迭代的 不是迭代器

 

生成器:(Gerator)      (数字为对应执行顺序)   

       1  def generator_func():   生成器函数

         6     print(123)

          7    yield'aaa'       相当于return

 3      2   g = generator_func()   generator生成器  生成器的本质就是迭代器

       4   print(g)

  8     5   ret = g.__next__()

    9       print(ret)

         带yield关键字的函数就是生成器函数

          生成器函数在执行的时候只返回一个生成器,不执行生成器函数中的内容

          生成器函数在执行的时候返回一个生成器

          从生成器中取值:

              1  __next__ 有几个yield就可以取几次

                2 for 循环取值 下常取值for i in g:

                  3 其它数据类型进行强行转换 list(g) 返回一个列表里面装着生成器中的所有内容

                      4 调用生成器函数的时候,要先获取生成器,再进行next取值

                         5 生成器中的内容只能取一次,且按顺序取值没有回头路,取完为止。

              生成器就是迭代器 生成器是我们自己的写的

                                               

     

 

posted on 2017-09-04 23:03  远去  阅读(132)  评论(0编辑  收藏  举报