例如,某天气软件要求,通过 络抓取各个城市气温信息,并依次显示:
如果一次抓取所有城市气温信息再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。
要求:以“用时访问”的策略,并将所有城市气温信息封装到一个对象里,可用for循环进行迭代。
解决方案:
Step1:实现一个迭代器对象WeatherIterator,它的方法每次返回一个城市的气温;
Step2:实现一个迭代器对象WeatherIterable,它的方法返回一个WeatherIterator对象。
- 对于类:
类是提供了方法的抽象基类。iterable表示可迭代对象,即能够逐一返回其成员项的对象。可迭代对象被可用于for循环以及许多其他需要一个序列的地方(、、…)。当一个可迭代对象作为参数传给内置函数时,它会返回该对象的迭代器。
使用可以检测一个对象是否已经注册到或者实现函数;但检测一个对象是否是可迭代对象的唯一可信赖的方法是调用 。
- 对于类:
类是提供了和方法的抽象基类,它继承类。iterator表示迭代器对象,即用来表示一连串数据流的对象。重复调用迭代器的方法(或将其传给内置函数)将逐个返回流中的项。
迭代器必须具有方法用来返回该迭代器对象自身,因此迭代器对象必定也是可迭代对象,但可迭代对象不一定是迭代器对象。
- 与区别:
判断是否是与:
凡是可以for循环的,都是Iterable;凡是可以的,都是Iterator。Iterable是一次性消费的,不同的Iterable之间没有关联。Python中的for循环就是通过实现的。
集合数据类型如list、truple、dict、str,都是Itrable不是Iterator,但可以通过函数获得一个Iterator对象。
- 方案示例:
使用迭代器:
结果:
通过迭代器对象,实现“用时访问”,每次返回一个城市的气温信息。可迭代对象类WeatherIterable必须要定义,因为迭代器对象是一次性的。
- 方案示例:
使用生成器:
结果:
通过生成器,不需要手动去维护迭代状态,生成器对象可以自动维护迭代状态,每次yield才返回一个气温信息。
文章知识点与官方知识档案匹配,可进一步学习相关知识Python入门技能树进阶语法文件211742 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!