Python3-for循环机制
for循环
for循环的底层实现机制:
for循环的实现机制其实是基于 迭代器协议 对 可迭代对象 不断迭代。
迭代器协议是指:对象需要提供_next_()方法,它返回迭代中的元素,在没有更多元素后,抛出StopIteration异常,终止迭代。
可迭代对象是指:凡是具有_iter_()的方法的类,都是可迭代的类。可迭代类创建的对象实现了_iter_()方法,因此就是可迭代对象。用list、tuple等容器创建的对象,都是可迭代对象。可迭代对象通过_iter_()方法返回一个迭代器,然后在内部调用_next_()方法进行迭代,最后没有元素时,抛出异常。
迭代器:迭代器对象必须同时实现_iter_()和_next_()方法,才是迭代器。对于迭代器来说,_iter_()返回的是它自身self,_next_()则是返回迭代器中的下一个值,最后没有元素时,抛出异常。
协议是一种约定,可迭代对象实现了迭代器协议,Python的内部工具(如for循环、max、min、sum函数等)使用迭代器协议访问对象。
因此for语句的内部机制为:
·先判断对象是否为可迭代对象,即是否存在_iter_()方法,如果存在,则调用_iter_()方法,返回一个迭代器;否则,直接抛出TypeError异常;
·不断的调用迭代器的_next_()方法,每次调用按顺序迭代获取当前的值;
·迭代完所有元素,抛出异常StopIteration,该异常Python解释器自己会进行处理