如何实现可迭代对象和迭代器对象(二)
程序员文章站
2024-03-22 11:12:52
...
之前我们介绍了可迭代对象和迭代器对象,现在我们就实现这两个对象,满足实际案例中的需求,解决方案如下:
- 实现一个迭代器对象WeatherIterator,next方法每次返回一个城市的气温;
- 实现一个可迭代对象WeatherIterable,__iter__方法返回一个迭代器对象。
代码如下:
# -*- coding: utf-8 -*-
import requests
from collections import Iterable, Iterator
# 实现天气的迭代器对象
class WeatherIterator(Iterator):
def __init__(self, cities):
self.cities = cities
self.index = 0
def getWeather(self, city):
r = requests.get(u'http://wthrcdn.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)
if __name__ == "__main__":
for x in WeatherIterable([u'北京', u'上海', u'广州', u'深圳']):
print x
其运行结果为:
北京: 低温 23℃, 高温 29℃
上海: 低温 30℃, 高温 40℃
广州: 低温 27℃, 高温 33℃
深圳: 低温 26℃, 高温 31℃