• 【python】可迭代对象(Iterable)、迭代器(Iterator)、生成器(generator)


    一、python中一切皆对象,那么“可迭代”对象与普通对象有什么区别呢?

    实现了__iter__方法的对象即为可迭代对象,str  list  tuple  dict  set 都是可迭代的,可以通过判断对象是否有__iter__属性来判断该对象是否是可迭代对象,如下:

    二、可迭代对象的__iter__方法的作用是什么?

    可迭代对象的__iter__方法的作用是返回一个迭代器对象。在使用for循环对可迭代对象进行迭代操作时,实际上是:调用__iter__方法,返回迭代器对象,这个迭代器对象不断的调用__next__方法返回元素,直到没有元素可以返回时抛出StopIteration异常。

    三、可迭代对象如何转成迭代器?

    iter(可迭代对象)

    四、什么是迭代器?

    实现了__iter__方法和__next__方法的对象都是迭代器对象。__iter__方法返回迭代器自身,即self,__next__方法返回下一个值,直至没有下一个元素可以返回时,抛出StopIteration异常。

    五、可迭代对象和迭代器对象中都要实现__iter__方法,那么这两者的__iter__方法的区别是什么?

    可迭代对象的__iter__方法是返回一个迭代器对象,通过这个迭代器对象完成迭代。迭代器对象的__iter__方法是返回它自身即self,与其__next__方法共同完成迭代。这也就是可迭代对象可以多次迭代,但是迭代器对象只能迭代一次的原因。

    六、使用for循环迭代迭代器时,执行过程是怎样的?

    在for开始迭代前,会自动调用迭代器的__iter__方法,获取迭代器对象,然后自动调用__next__方法开始迭代。如下:

    七、什么是生成器?

    生成器是一种特殊的迭代器,不过这种迭代器更加优雅,不需要实现__iter__方法和__next__方法,而是通过关键字 yield 即可实现快速、便捷的创建一个迭代器。

    八、生成器的语法?

    类似函数的定义,但不返回值。为了显示序列中每一个元素,会使用 yield 语句。只要函数的定义体中有 yield 关键字,那么该函数就是生成器函数。调用生成器函数时,不会执行函数的内容,而是返回一个生成器对象。如下:

    九、既然生成器函数没有返回值,那么该如何去访问他的元素呢?

    获取生成器函数返回的生成器对象,对该对象进行迭代操作。如下:

    十、生成器表达式?

    简单的生成器函数,可以替换成生成器表达式。生成器表达式可以理解为列表推导式的惰性版本,即不会马上构建列表,而是返回一个生成器对象,按需惰性生成元素。

    生成器表达式格式:(对每次迭代的元素的操作 for语句)

     

  • 相关阅读:
    英文字典。怎样设计数据结构
    最近看的几部电影电视剧
    pylucene 中文
    提高浏览体验的五十个最佳FireFox扩展插件
    结构和细节
    <传> 《程序猿装B指南》,程序员童鞋们请认真学习
    c++ builder TTreeView customSort 实现 自定义排序
    《转》c++ 字符串系列:字符编码进阶(下)
    庆祝我又读完一本书
    c++ 回调函数深究
  • 原文地址:https://www.cnblogs.com/panpanda/p/16356406.html
Copyright © 2020-2023  润新知