抓取各个城市的气温情况,并显示在网页上面 目前能做到的是一次性抓取所有的城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费空间,
解决:把所有的城市气温封装到一个对象中,用for进行循环
对象的可迭代 得到迭代器对象
li=[1,2,34,5]
s=‘abcdefg’ #s li 是python中的可迭代对象
for x in li:pritn x
原理:首先确保l是一个可迭代的对象,有python内置函数iter得到一个迭代器对象
迭代器对象 = iter(li)
为什么列表和数字是可迭代对象
满足了某些特殊的接口
1. li.iter 调用iter(l) 内部调用li.iter() 方法
2. s.getitem 序列接口
t=iter(li)
t.next()
…
具体实现
step1:实现一个迭代器对象WeatherIterator,next方法每次返回一个城市的气温
step2:实现一个可迭代对象WeatherIterable,__iter__方法返回一个迭代器对象
from collections import Iterable,Iterator
class WeatherIterator(Iterator):
def __init__(self,cities):
self.cities = cities
self.index = 0
def getWeather(self,city):
r = reuqest.get('http://wthrcden.etouch.cn/weather_mini?city='+city)
data = r.json()['data']['forecast'][0]
return '%s:%s,%s' %(city,data['low'],data['high'])
def next(self):
if self.index == len(self.cities):
raise StopIteration
city = self.cities[self.index]
self.index+=1
return self.getWeather(city)
class WeatherIterable(Iterable):
def __init__(self,cities):
self.cities = cities
def __iter__(self):
return WeatherIterator(self.cities)
for x in WeatherIterable([u'北京',u'上海'])
print x