美文网首页工作生活
迭代器、生成器

迭代器、生成器

作者: 张明越 | 来源:发表于2019-07-02 10:40 被阅读0次

    迭代器
    迭代是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退

    可迭代对象

    我们已经知道可以对list、tuple、str等类型的数据使用for...in...的循环语法从其中依次拿到数据进行使用,我们把这样的过程称为遍历,也叫迭代

    以直接作用于 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 对象。

    迭代器什么时候结束:

    抛出异常就会结束

    面试题:为什么使用迭代器

    迭代器能够实现for循环,占用空间小(保存的不是生成这个数列的结果而是生成这个数列的方式)


    生成器

    一边循环一边计算的机制称为生成器:generator。

    创建生成器:

    1.把一个列表生成式的[]改成()

    2.只要在def中有yield关键字的 就称为 生成器

    学习总结:

        使用了yield关键字的函数不再是函数,而是生成器。

        yield关键字的特点:

    (1)保存当前运行状态(断点),然后暂停执行,即将生成器(函数)挂起    

    (2)将yield关键字后面表达式的值作为返回值返回,此时可以理解为起到了return的作用

        可以使用next()函数让生成器从断点处继续执行,即唤醒生成器(函数)

        Python3中的生成器可以使用return返回最终运行的返回值,而Python2中的生成器不允许使用return返回一个返回值(即可以使用return从生成器中退出,但return后不能有任何表达式)。

    使用send唤醒

    相关文章

      网友评论

        本文标题:迭代器、生成器

        本文链接:https://www.haomeiwen.com/subject/kkvacctx.html