• 迭代器的简要概述


    迭代器的简要概述

    在说迭代器之前我们先来看一下以下的代码:

    for element in iterable
    

    在我们之前学习的for循环中,实际上就是从迭代器中一个一个地拿元素。

    我们注意到,在python中有许多类型的对象可以被定义为可迭代的。基本容器类型,如列表、元组和集合,都可以被定义为迭代类型。此外,字符串也可以产生它的字符迭代,字典可以生成它的键的迭代,文件可以产生它的行的迭代。用户自定义类型也可以迭代。在python中,迭代器的机制基于以下的规定:

    • 迭代器是一个对象,通过一系列的值来管理迭代。如果i定义为一个迭代器对象,那么每次调用内置函数next(i),都会从当前的序列中产生一个后续的元素;如果没有后续的元素了,那么就会抛出一个StopIteration异常。

    • 对象object是可迭代的,那么通过语法iter(object)可以产生一个迭代器

      通过这些定义,list的实例是可迭代的,但是它本身不是一个迭代器。比如data = [1,3,5,7]调用next(data)非法的。只有通过i = iter(data) 则可以产生一个迭代器对象,然后调用next(i)将返回列表中的元素。python中的for循环语法就是使这个过程自动化,为可迭代对象创造了一个迭代器,然后反复调用下一个元素知道捕获StopIteration异常。

      提示:迭代器通常是间接引用回到初始的元素维护其状态。比如,对列表实例调用iter(data)会产生一个list_iterator类的一个实例。迭代器不存储自己列表的元素。相反,他保存原始列表的当前索引,该索引指向下一个元素。因此,如果原始列表的内容在迭代器构造之后但在迭代完成之前被修改,迭代器将报告原始列表的更新内容

    # 例子
    data = [1,3,5,7]
    for i in data:
        data.pop()
    print(data)    #[1,3]
    
  • 相关阅读:
    Lua获取当前时间
    标准库
    Cocos2d-x retain和release倒底怎么玩?
    lua 中处理cocos2dx 的button 事件
    探讨把一个元素从它所在的div 拖动到另一个div内的实现方法
    从 ie10浏览器下Symbol 未定义的问题 探索vue项目如何兼容ie低版本浏览器(ie9, ie10, ie 11 )
    setTimeout里无法调用鼠标事件的event
    浅谈HTTP缓存以及后端,前端如何具体实现HTTP缓存
    window7电脑git设置快捷命令
    从获取点击事件根元素谈 target和currentTarget
  • 原文地址:https://www.cnblogs.com/Du704/p/11352128.html
Copyright © 2020-2023  润新知