02-迭代器及其使用方法

目标

  • 知道使用 iter 函数可以获得可迭代对象的迭代器
  • 知道使用 next 函数可以获得迭代器数据

1.迭代器

我们分析对可迭代对象进行迭代使用的过程,发现每迭代一次(即在for...in...中每循环一次)都会返回对象中的下一条数据,一直向后读取数据直到迭代了所有数据后结束。那么,在这个过程中就应该有一个“人”去记录每次访问到了第几条数据,以便每次迭代都可以返回下一条数据。我们把这个能帮助我们进行数据迭代的“人”称为迭代器(Iterator)

可迭代对象通过__iter__方法向我们提供一个迭代器,我们在迭代一个可迭代对象的时候,实际上就是先获取该对象提供的一个迭代器,然后通过这个迭代器来依次获取对象中的每一个数据.

2. iter()函数与next()函数

  • 我们可以通过iter()函数获取这些可迭代对象的迭代器。

iter()函数实际上就是调用了可迭代对象的__iter__方法。

# 1. 定义列表
data_list = [1,3,5,7,9]

# 2. 获取可迭代对象的迭代器
data_list_iterator = iter(data_list)

# 3. 查看迭代器
print(data_list_iterator)
image-20181113181557840

  • 使用迭代器可以获取下一条数据 next(迭代器)
# 4. 使用next(迭代器) 可以获取列表的下一个元素
value = next(data_list_iterator)
print("value = ", value)

image-20181113182118388

注意,当我们已经迭代完最后一个数据之后,再次调用next()函数会抛出StopIteration的异常,来告诉我们所有数据都已迭代完成,不用再执行next()函数了。

image-20180822145914370

3. 如何判断一个对象是否是迭代器

可以使用 isinstance() 判断一个对象是否是 Iterator 对象:

In [56]: from collections import Iterator

In [57]: isinstance([], Iterator)
Out[57]: False

In [58]: isinstance(iter([]), Iterator)
Out[58]: True

In [59]: isinstance(iter("abc"), Iterator)
Out[59]: True