美文网首页
python(可迭代对象和迭代器对象)

python(可迭代对象和迭代器对象)

作者: OldSix1987 | 来源:发表于2016-09-02 17:55 被阅读448次

案例


某软件要求,从网络抓去各个城市气温信息,并依次显示:
北京:15~20
天津:17~22
长春:12~18
……
如果一次抓取所有城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。
我们期望以“用时访问”的策略,并且能把所有城市气温封装到一个对象里,可用for语句进行迭代。如何解决?

解析


Step1:实现一个迭代器对象WeatherIterator,__next__方法每次返回一个城市气温。
Step2:实现一个可迭代对象Weatherlterable,__iter__方法返回一个迭代器对象。

# coding:utf8

from collections import Iterable, Iterator
import requests

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)

for x in WeatherIterable([u'北京', u'深圳', u'长春', u'武汉']):
    print(x)

相关文章

  • Python中的可迭代对象和迭代器对象

    Python中的可迭代对象和迭代器对象是两种不同的东西,可迭代对象是Iterable,迭代器对象是Iterator...

  • Python基础-16生成器-迭代器

    16.生成器-迭代器     可循环迭代的对象称为可迭代对象,迭代器和生成器函数是可迭代对象,在Python中提供...

  • 生成器与迭代器

    一:可迭代对象(Iterable) 1、什么叫可迭代对象? 2、python中那些是可迭代对象 二:迭代器(Ite...

  • [笔记]可迭代对象、迭代器、生成器

    为了更深入一点理解可迭代对象和迭代器,读了几篇不错的文章: Python实践18-可迭代对象和迭代器 - 曾月天的...

  • Python12--迭代器

    1.迭代器 要理解迭代器,首先需要明白迭代器和可迭代对象的区别。一个一个读取、操作对象称为迭代,Python 中,...

  • 17.Python之迭代器

    Python之迭代器 可迭代对象内部含有__iter__方法的对象,称之为可迭代对象。 通过dir()获取一个对象...

  • Python可迭代对象与迭代器详解

    Python可迭代对象与迭代器详解 首先先来了解几个概念 可迭代对象 (Iterable) : 实现了 __ite...

  • Python迭代器

    Python迭代器 一、可迭代对象 判定对象是否为可迭代对象1.检查对象x是否实现了__iter__()方法,如果...

  • 迭代器和生成器 (Iterator & Generator)

    迭代器 迭代器对象要求支持迭代器协议的对象,在Python中,支持迭代器协议就是实现对象的__iter__()和n...

  • 3-1 如何实现可迭代对象和迭代器对象(1)

    for循环的背后:确保in后边为可迭代对象 可迭代对象可以由内置函数iter得到一个迭代器对象注意:可迭代和迭代器...

网友评论

      本文标题:python(可迭代对象和迭代器对象)

      本文链接:https://www.haomeiwen.com/subject/aizhettx.html