python 3-2如何实现可迭代对象和迭代器对象(2)

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

  1. 先定义一个Iterator实现next
  2. 再定义一个weatherIterable实现iter
  3. 最后使用for in 遍历解决
import requests
from collections.abc import Iterable, Iterator


class weatherIterator(Iterator):
    index = 0

    def __init__(self, cities):
        self.cities = cities

    def __next__(self):
        if self.index == len(self.cities):
            raise StopIteration
        city = self.cities[self.index]
        self.index = self.index + 1
        return self.getweather(city)

    #获取天气接口API
    def getweather(self, s):
        cities = {'北京': 'CH010100', '上海': 'CH020100', '广州': 'CH280101'}
        # 北京:CH010100 上海:CH020100 广州:CH280101
        # CH280101 http://api.yytianqi.com/forecast7d?city=CH280101&key=rsdo40081gvhnecf
        r = requests.get("http://api.yytianqi.com/forecast7d?city=%s&key=rsdo40081gvhnecf" % cities[s])
        data = r.json()['data']['list'][0]
        return "%s: 白天气温 %s ℃, 夜间气温 %s ℃" % (s, data['qw1'], data['qw2'])


class weatherIterable(Iterable):
    def __init__(self, cities):
        self.cities = cities

    def __iter__(self):
        return weatherIterator(self.cities)


# 先定义一个Iterator实现__next__,再定义一个weatherIterable实现__iter__,最后使用for in 遍历解决
cities = ['北京', '上海', '广州']
for x in weatherIterable(cities):
    print(x)