在使用Python时,我们经常会使用for循环来访问容器对象(列表、字符、字典等)中的元素。其幕后实际是通过迭代协议来完成的,迭代是一种依次访问对象中元素的方式,for循环在对象上调用iter()函数生成一个迭代器(对象要是可迭代的,即支持迭代协议),然后通过迭代器对元素进行访问。
文章目录
一、for循环的实现
考虑下面一个简单for循环
numbers = [1,2,3]
for num in numbers:
print(num)
当for循环作用在numbers变量上时,它实际依次做了下面的动作:
- 调用iter(numbers),此函数会返回一个迭代器对象,该对象会包含一个__next()__方法,调用此方法会逐一访问对象中的元素。
- 重复调用对象的__next()__方法,逐个返回对象中的元素。
- 元素用尽时,迭代器会抛出StopIteration异常,for循环捕获到该异常,退出for循环,执行结束。
因此for循环幕后的执行过程就是:
it