如何实现可迭代对象和迭代器对象

文章介绍了如何通过创建WeatherIterator和WeatherIterable类来改进气温数据抓取性能,将所有城市的气温封装在迭代器中,降低延迟并节省空间。作者展示了如何利用Python的可迭代对象和内置函数实现这个过程。
摘要由CSDN通过智能技术生成

抓取各个城市的气温情况,并显示在网页上面 目前能做到的是一次性抓取所有的城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费空间,
解决:把所有的城市气温封装到一个对象中,用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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值