迭代器是指实现了迭代器协议的对象,那么什么是迭代器协议?
迭代器协议:对象需要提供next
方法,它要么返回迭代中的下一项,要么就引起一个StopIteration
异常,以终止迭代.
来举个例子,python提供了一个iter
函数用来生成迭代器:
alist = [1, 2, 3, 4]
it = iter(alist)
it
迭代器都有一个next
方法,调用next
方法迭代指针会指向下一个元素的位置。若下一个元素没有了,则会抛出StopIteration
异常。
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
一些数据结构list
、tuple
、dict
、set
、str
等作用于for
循环的时候,首先对循环对象实现迭代器包装,返回一个迭代器对象,然后每循环一步,就调用迭代器对象的next
方法,循环结束的时候,自动处理了 StopIteration
这个异常。举个例子:
for x in [1, 2, 3, 4, 5]:
pass
完全等价与:
# 首先获得Iterator对象:
it = iter([1, 2, 3, 4, 5])
# 循环:
while True:
try:
# 获得下一个值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循环
break
假设你有一个特定的数据结构,比如说某种图或树结构,需要以一定的技巧获取下一个值,这时你可以实现一个迭代器,将复杂的逻辑都放到next()
函数中,这样其他人就可以直接使用for
循环来遍历你的数据结构,无需关系你的结构是如何工作的.
可见,迭代器的作用是为所有的数据结构提供统一的接口,只要实现了迭代器协议,无论是2叉树
、3叉树
、N叉树
、集合
、还是链表
,都可以使用next()
来获取下一个值,使用for
循环来遍历.