• python 迭代器和生成器


         迭代器     

      一、什么是迭代器    

    迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样)。迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序列的第一个元素开始访问,直到所有的元素都被访问才结束。 [注意]:迭代器只能前进不能后退

    [迭代器的优点]:

    使用迭代器不要求事先准备好整个迭代过程中的所有元素。迭代器仅仅在迭代到某个元素时才计算该元素,而在这之前或之后元素可以不存在或者被销毁。因此迭代器适合遍历一些数量巨大甚至无限的序列。

        二、补充    

    可迭代对象


    以直接作用于 for 循环的数据类型有以下几种:
    一类是集合数据类型,如 list 、 tuple 、 dict 、 set 、 str 等;
    一类是 generator ,包括生成器和带 yield 的generator function。
    这些可以直接作用于 for 循环的对象统称为可迭代对象: Iterable 。


    判断是否可以迭代


    可以使用 isinstance() 判断一个对象是否是 Iterable 对象而生成器不但可以作用于 for 循环,还可以被 next() 函数不断调用并返回下一个值,直到最后抛出 StopIteration 错误表示无法继续返回下一个值了。


    迭代器


    可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
    可以使用 isinstance() 判断一个对象是否是 Iterator 对象:


    iter()函数


    生成器都是 Iterator 对象,但 list 、 dict 、 str 虽然是 Iterable ,却不是 Iterator 。
    把 list 、 dict 、 str 等 Iterable 变成 Iterator 可以使用 iter() 函数


    最后


    凡是可作用于 for 循环的对象都是 Iterable 类型;

    凡是可作用于 next() 函数的对象都是 Iterator 类型集合数据类型如 list 、 dict 、 str 等是 Iterable 但不是 Iterator ,不过可以通过 iter() 函数获得一个 Iterator 对象。

        三、迭代器的调用(使用)    

    使用内建的工厂函数iter(iterable)可以将可迭代序列转换为迭代器

    a=[1,2,3,4]
    b=(1,2,3)
    str='Tomwenxing'
    print(iter(a))
    print(iter(b))
    print(iter(str))

    运行结果:(调用__item__方法,得到迭代器内存地址)

    <list_iterator object at 0x00E6ED50>
    <tuple_iterator object at 0x00E6ED50>
    <str_iterator object at 0x00E6ED50>

    如果想要取值,我们需要使用内置的next方法

    a=[1,2,3,4].__iter__()
    print(a.__next__())
    print(a.__next__())
    print(next(a))
    print(next(a))

    运行结果:(每一次调用next方法,从迭代器中拿出一个值。需要注意的是:如果值取完了,继续调用next程序会抛出StopIteration错误)

    1

    2

    3

    4

         生成器     

      一、什么是生成器  

    Python中提供的生成器:

    1.生成器函数:常规函数定义,使用yield语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

    2.生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

     

    生成器Generator:

      本质:迭代器(所以自带了__iter__方法和__next__方法,不需要我们去实现)

      特点:惰性运算,开发者自定义

  • 相关阅读:
    自定义 sql Split函数 / 自定义mp_helptext查看存储
    easyUI 节点树选择
    EasyUI手风琴 Tab卡使用
    水晶报表分组,统计,求和,sum()函数使用
    华硕GL502VSK处理器使用XTU降压。
    .
    bootstrap4元素居左居右
    关于npm run dev报错npm ERR! missing script: dev
    使用Vue写一个登陆页面并在管理页面查看和修改
    localStorage注册页面A注册数据在本地储存并在B页面打开
  • 原文地址:https://www.cnblogs.com/zhuzl/p/11249440.html
Copyright © 2020-2023  润新知