Python遍历3元素列表时自定义迭代器为何输出4次迭代器对象?
现象产生原因
核心问题出在代码里print(iterator)和next(iterator)的执行顺序:你先执行了打印操作,再调用next()获取元素判断是否遍历结束,3个元素的迭代器会触发4次打印,具体执行流程如下:
- 初始化迭代器后进入第一次循环:先打印迭代器对象,调用
next()返回1,无异常,继续循环 - 第二次循环:先打印迭代器对象,调用
next()返回2,无异常,继续循环 - 第三次循环:先打印迭代器对象,调用
next()返回3,无异常,继续循环 - 第四次循环:先打印迭代器对象,调用
next()时迭代器已无剩余元素,抛出StopIteration异常,才触发break跳出循环
如果要让打印次数和元素数量保持一致,调整两个语句的顺序即可,修改后的参考代码:
def special_for(iterable): iterator = iter(iterable) while True: try: next(iterator) print(iterator) except(StopIteration): break
内容的提问来源于stack exchange,提问作者EBG
相关产品推荐
相关产品推荐

