迭代器的简要概述

迭代器的简要概述

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

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]
原文地址:https://www.cnblogs.com/Du704/p/11352128.html