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 循环开始,中间引申了 列表生成式、生成器、迭代器,他们之间的关系就是这样

     

  • 相关阅读:
    Synchronized 锁 批量重偏向 和批量撤销
    Synchronize 偏向锁,轻量级锁升级和撤销过程,对象头的变化
    JAVA 对象到底有什么
    什么是操作系统虚拟地址
    从C角度看 i = i+ 1本质
    Linux操作系统的三种锁机制
    SpringCloud启动过程中如何完成Nacos服务注册
    Nacos源码一
    JAVA线程的本质
    SpringCloud启动-Nacos服务注册
  • 原文地址:https://www.cnblogs.com/jcjc/p/11424490.html
Copyright © 2011-2022 走看看