python三大器之迭代器

发布于 2021-04-29 08:38

1. 迭代的概念

迭代:就是在原来的代码基础上逐步添加新功能。

判断一个东西是否可迭代,只要判断它是否是这个类的子类,即是否可用isinstance()。

2. 判断一个对象是否迭代:

查看这个对象所在的类是否由 __iter__()

3. 什么是迭代器:

只要一个类中由 __iter__()和 __next__()方法,那就称这个类为迭代器类。由它创建的类为迭代器类。迭代器可以用for in来遍历,它的实现原理如下。

如果想让一个对象classmate实现for循环,首先要在它对应的类Classmate中实现一个 __iter__()方法;且此方法必须要返回一个迭代器ClassIterator()的引用,实际上for循环是这个迭代器去调用它对应的类ClassIterator里面的 __next__()方法, __next__()返回的值即最终for循环返回的值

4.  因为for循环是对Classmate类的对象的便利,作为其他类的__next__()方法里面如何才能实现对不是本类对象的调用呢?

只需要在ClassIterator类中调用Classmate对象的引用即可,即在ClassIterator加__init__() 函数,通过Classmate类中的__iter__(self)传过来即可。

5. 如何判断迭代器已经取完?

在__next__()中结果取完后加一个StopIteration()异常。

6. 有没有可能再将上述代码简化一下呢?如下图

将Classmate类中添加一个 __next__()方法使它变成一个迭代器,并在 __iter__()方法里返回它自己的实例对象;for循环会自动去调用这个对象也就是它自己的类里的__next__()方法,最终返回结果,此时就不需要ClassIterator类啦。



相关资源