zoukankan      html  css  js  c++  java
  • 迭代器

    什么是迭代器?

    迭代是一个重复的过程,每次重复即以此迭代,并且每次迭代的结果都是下一次迭代的初始值

      1、为何要有初始值:

        对于序列类型、字符串、列表、元组,我i们可以使用索引的方式迭代取出其包含的元素;但对于字典、集合、文件等类型的时没有索引的,若还想去除内部包含的元素,则必须找到一中不依赖索引的迭代方式,这就是迭代器

      2、什么是可迭代对象:

        可迭代对象指的是内置有__iter__()方法的对象,即obj.__iter__()

      3、什么是迭代器对象: 

        可迭代对象执行 obj,.__iter__() 得到的结果就是迭代器对象,而迭代器对象指的是即内置有__iter__() 有内置有 __next__方法的对象

      4、文件类型四迭代对象

        open('a.txt')..__iter__()

        open('a.txt').__next__()

    优点:

      1、提供一种统一的、不依赖于索引的迭代方式

      2、惰性计算,节省内存

    缺点:

      1、无法获取长度(只有在 next 完毕才知道到底有几个值)  

      2、一次性的,只能往后走,不能往前回退

    再论 for 循环

      for 循环工作原理:

        1、执行 in 后对象的 dic.__iter__() 方法,得到一个迭代对象 iter_dic

        2、执行 next(iter_dic),将得到的值赋值给 k, 然后执行循环体代码

        3、重复过程2、直到捕捉到异常 StopIteration,,结束循环

    可以直接作用于 for 循环的数据类型有以下几种:
        1、一类集合数据类型,如 list、tuple、dict、set、str 等

        2、一类是生成器 generator,包括生成器和带 yield 的generator function

      这些可以直接作用于 for 循环的对象统称为 可迭代对象, Iterabke。 可以使用 isinstance() 判断一个对象的是否是 Iterable 对象:

    >>>from  colllection import Iterable
    >>>isinstance([], Iterable)
    True
    
    >>>isindtance('abc', Iterable)
    True
    
    
    >>>isinstance((x for x in range(10)), Iterable)
    True
    
    >>>isinstance(100, Iterable)
    False

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

      可以用isinstance() 判断一个对象是否是 Iterator 对象

    >>> from collection import Iteratir
    >>>isinstannce((x for x in range(10)), Iterator)
    True
    
    >>>isinstance("abc", Iterator)
    False
    
    >>>isinstance([], Iterator)
    False

    由for 循环开始,中间引申了 列表生成式、生成器、迭代器,他们之间的关系就是这样

     

  • 相关阅读:
    java代码水仙花
    java代码求奖金。要求从键盘输入利润
    java中输入3个数,从大到小的输出。。。。
    java代码从键盘输入n的值,计算1+1/2+1/3+...+1/n的值,,
    java求1+1/2+1/3+1/4+......+1/n的值
    求分数1+1/2+1/3+.....+1/n的值
    论程序员成长:如何像游戏一样打怪?新手值得重视!
    网曝某大厂员工下班健身后去领公司夜宵,被罚终身禁止领夜宵并冻结涨薪降考评!
    每个程序员都该学习的5种编程开发语言!最后一门大部分人没听过~
    C语言编程初学者基础知识学习:文件的读写操作!
  • 原文地址:https://www.cnblogs.com/jcjc/p/11424490.html
Copyright © 2011-2022 走看看