迭代器/可迭代对象/生成器

>>>迭代器

  >>什么是迭代器:

        迭代:更新换代(重复)的过程,每次的迭代都必须基于上一次的结果

        迭代器:迭代取值的工具  

  >>迭代器的优点和缺点:

         >>优点: 迭代器给我们提供了一种不依赖于索引取值的方式,另外,当可迭代对象使用__iter__()方法并赋值给一个变量后,该变量对应的只会是一个内存地址,从而节省内存空间,且在该变量使用__next__()方法,读取数据时,也是生成一个读一个,效率较高.

           >>缺点: 迭代器只能顺序读取可迭代对象内的值,无法读取可迭代对象内指定位置的值.

>>>可迭代对象

   只要该数据类型的内置方法中有__iter__方法,就是可迭代对象.如(字符串,列表,字典,元组,集合)

 

代码演示如下:

test = [1,2,3,4]   #创建列表
print(t)  # <list_iterator object at 0x00000260D456A2B0>

t = test.__iter__() # 生成迭代器 print(t.__next__()) # 1 # 用__next__()方法,顺序迭代读取列表中的值
print(t.__next__()) # 2 
print(t.__next__()) # 3
print(t.__next__()) # 4

 

>>>生成器

  >>什么是生成器

    >生成器就是用户自定义的迭代器,本质是迭代器      

               >生成器的关键字是yield,带有yield关键字的函数,在定义的时候类型是普通函数,在函数加括号执行时,函数体内的代码不会被执行,只会将函数变成生成器对象,然后可以用__next__方法去执行函数体内的代码.

    

    从图中可以看见,未使用__next__()方法,迭代生成器前,生成器都只是一个内存地址,所以可以看出,他继承了迭代器的优点,当然缺点也继承了.他与迭代器唯一不同的地方,就是加入了yield关键字,下面讲下yield关键字

    yield和return比较:

      yield:可以返回结果,可以同时返回多个值,返回结果后不会退出函数,而是暂停在当前位置,若下次再执行函数体代码时,则从当前位置开始.yield还可以通过send()方法,从外部向内部传值.

      return:可以返回结果,可以同时返回多个值,且返回结果的同时,会退出函数

       

利用yield,自定义range()方法

使用send()方法,从函数外部,向函数内部的yield进行传值

 

posted @ 2019-07-15 17:40  去遇见最好的自己  阅读(254)  评论(0编辑  收藏  举报