zoukankan      html  css  js  c++  java
  • 迭代器的简要概述

    迭代器的简要概述

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

    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]
    
  • 相关阅读:
    DirectSound学习笔记(7):缓冲区操作
    Firebird MsSQL Data Types比较
    插座上的Linux充电器.不..Marvell Plug Computer
    ASP.NET / 学习asp.net比较完整的流程
    P2P穿透UDP/TCP原理
    在C#中利用ActiveX控件进行视频采集
    ffmpeg快速命令使用
    Win7上帝模式
    DirectSound学习笔记(3):协作级别
    自己写的一个asp.netcookies购物车类
  • 原文地址:https://www.cnblogs.com/Du704/p/11352128.html
Copyright © 2011-2022 走看看