• 迭代器


    什么是迭代器?

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

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

     

  • 相关阅读:
    spring cglib final @Transactional
    【转】电商架构
    logback发邮件配置
    @Reference不支持继承
    jmap jstack
    dubbo线程池
    C# 爬虫框架实现 流程_爬虫结构/原理
    C# 爬虫框架实现 流程_各个类开发
    C# 爬虫框架实现 概述
    作用域 作用域链 闭包 思想 JS/C++比较
  • 原文地址:https://www.cnblogs.com/jcjc/p/11424490.html
Copyright © 2020-2023  润新知