《Python学习之路 -- Python基础之迭代器及for循环工作原理》

Posted jonas_von

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了《Python学习之路 -- Python基础之迭代器及for循环工作原理》相关的知识,希望对你有一定的参考价值。

  提到迭代器不得不说迭代器协议,迭代器协议是指:对象必须提供一个__next__()方法,执行该方法要么返回迭代中的下一项,要么就抛出一个StopIteration异常(相当于报错的意思)以终止迭代。然而遵循这个协议的对象就称为可迭代对象,又称为迭代器。在Python中,for循环操作的对象就是可迭代对象。说到这里可能会引起一些误会,原因就是我们都知道for循环可以直接遍历列表、元组或字符串等等集合,但是这些数据类型并没有上面提到的__next__()方法,也就是说这些数据类型根本就不遵循迭代器协议,也就意味着列表、元组、字符串或字典等都不是可迭代对象,那么for循环究竟是如何工作的呢?

  首先,验证刚刚说的列表或字符串等等都不是可迭代对象:

那么问题来了,为什么说 for 循环操作的是可迭代对象,然而这些数据类型又不是可迭代对象,那为什么 for 循环能够操作他们呢?下面就来介绍 for 循环的工作原理:

其实,for 循环在处理这些数据前,会调用 __iter__() 方法,将这些数据转化为一个可迭代对象,然后调用可迭代对象的 __next__() 方法,并捕获StopIteration异常,也就实现了遍历完所有数据就会结束,并不会抛出这个异常。

# 利用while循环模拟for循环
num_list = [1,2,3,4]
# 先调用数据的__iter__()方法,生成一个可迭代对象
list_iterable = num_list.__iter__()
# 检查可迭代对象的类型,返回 <class \'list_iterator\'>  列表迭代器
print(type(list_iterable))
# 调用可迭代对象的__next__()方法实现遍历,并捕获StopIteration异常
while True:
    try:
        print(list_iterable.__next__())  # 遍历列表中的所有元素  --- 1  2  3  4
    except StopIteration:
        break

 

以上是关于《Python学习之路 -- Python基础之迭代器及for循环工作原理》的主要内容,如果未能解决你的问题,请参考以下文章

PYTHON学习之路_PYTHON基础

Python学习之路基础篇--09Python基础,初识函数

Python 学习之路 - Python 基础 - One

python学习之路

Python学习之路——Python基础之运算符

python学习之路基础01