欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

如何实现可迭代对象和迭代器对象(二)

程序员文章站 2024-03-22 11:12:52
...

之前我们介绍了可迭代对象和迭代器对象,现在我们就实现这两个对象,满足实际案例中的需求,解决方案如下:

  1. 实现一个迭代器对象WeatherIterator,next方法每次返回一个城市的气温;
  2. 实现一个可迭代对象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℃