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)
- 使用迭代器可以获取下一条数据
next(迭代器)
。
# 4. 使用next(迭代器) 可以获取列表的下一个元素
value = next(data_list_iterator)
print("value = ", value)
注意,当我们已经迭代完最后一个数据之后,再次调用next()函数会抛出StopIteration的异常,来告诉我们所有数据都已迭代完成,不用再执行next()函数了。
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