迭代器和可迭代对象的实际应用-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

实际用例:
从网络抓取各个城市气温信息,并依次显示:
北京:15~20
天津:17~22
长春:12~18
.....

如果依次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,
并且浪费存储空间.我们期望以"用时访问"的策略,并且能把所有城市气温封装到一个对象里,
可用for语句进行迭代.

解决方案:
step1:实现一个迭代器对象WeatherIterator,next方法每次返回一个城市气温
step2:实现一个可迭代对象WeatherIterable,__iter__方法返回一个迭代器对象.

如果你对迭代器和可迭代对象还不是太了解可以查看下面这篇文章

Python3 实现 可迭代对象和 迭代器对象

[code lnag="python"] In [1]: l = [1,2,3] In [2]: s = 'abcdef…

今天就利用可迭代对象,迭代器对象进行改写函数;

迭代器和可迭代对象的实际应用-新乡seo|网站优化,网站建设_微信公众号:zeropython—昊天博客

总结

实现for循环迭代关键两点:

一,__iter__()

二,__next__()

实例的末尾 for x in WeatherIterable([u'北京',u'上海',u'广州',u'咸宁']),其实可以直接用WeatherIterator([u'北京',u'上海',u'广州',u'咸宁'])替代,一样可以得出正确的结果。因为WeatherIterator继承了Iterator,因此就算WeatherIterator没有定义__iter__()方法,但是默认调用了父类Iterator的__iter()__方法,把可迭代对象参数变成迭代器参数,再调用定义好的__next__()。

帮助信息

Iterator迭代器:__iter__():__next__():

任何具有__next__()方法的对象都是迭代器,对迭代器调用next()方法可以获取下一个值。

Iterable可迭代对象:

大部分容器都是可迭代的,但是还有其他一些对象也可以迭代,例如:文件对象以及管道对象等等,容器一般来说存储的元素是有限的

可迭代对象可以为任意对象,不一定非得是基本数据结构,只要这个对象可以返回一个iterator