python基础一 ------可迭代对象和迭代器对象

可迭代对象和迭代器对象;前者生成后者

比喻:10个硬币都可以一一数(迭代),放入到存钱罐(可以取钱的那种),那这个存钱罐就是一个迭代器对象

需求:从网络抓取各个城市气温信息,并依次显示
若依次抓取较多的城市,有较高的访问延迟,并且浪费存储空间,
希望以 “用时访问”策略 将所有的城市气温封装在
一个对象,可 用for语句迭代,如何解决?


方法:
一:实现一个迭代器对象,next()方法返回每一个城市气温
二:实现一个可迭代对象,__iter__方法返回一个迭代器对象

 1 import requests
 2 
 3 
 4 
 5 #print(getWeather(u"北京"))
 6 
 7 #创建一个迭代器
 8 from collections import Iterable,Iterator
 9 class WeatherIterator(Iterator):
10     def __init__(self,cities):
11         self.cities = cities
12         self.index  = 0
13     def getWeather(self,city):
14         r =requests.get(u"http://wthrcdn.etouch.cn/weather_mini?city=" + city)
15         data = r.json()['data']['forecast'][0]
16         return '{0}:{1},{2}'.format(city, data['low'],data['high'])
17 
18     def __next__(self):
19         if self.index == len(self.cities):
20             raise StopIteration
21         city = self.cities[self.index]
22         self.index += 1
23         return self.getWeather(city)
24 #生成一个可迭代对象
25 class WeatherIterable(Iterable):
26     def __init__(self,cities):
27         self.cities = cities
28     def __iter__(self):
29         return WeatherIterator(self.cities)
30 
31 for w in WeatherIterable([u"北京",u"肥城",u"呼和浩特"]):
32     print(w)

 

posted @ 2017-05-12 15:11  若鸟  阅读(268)  评论(0编辑  收藏  举报