zoukankan      html  css  js  c++  java
  • 迭代器/可迭代对象/生成器

    >>>迭代器

      >>什么是迭代器:

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

            迭代器:迭代取值的工具  

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

             >>优点: 迭代器给我们提供了一种不依赖于索引取值的方式,另外,当可迭代对象使用__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进行传值

  • 相关阅读:
    HDU4465 Candy
    《有关概率和期望问题的研究》读书笔记(完成度:40%)
    HDU5583 Kingdom of Black and White
    Gym100548F Color
    HDU6035 Colorful Tree
    Echarts笔记
    springMVC
    Struts2
    SSH框架学习中遇到的问题
    I/O流
  • 原文地址:https://www.cnblogs.com/hellozizi/p/11190328.html
Copyright © 2011-2022 走看看