python_如何实现可迭代对象和迭代器对象?
2017-07-26 06:48
549 查看
什么是可迭代对象?
列表、字符串
for循环的本质?
for循环要确保in后面的对象为可迭代对象,如何确保?
iter() 方法得到一个迭代器对象
不停.__next__() 方法对迭代器对象进行迭代,直到捕获StopIteration异常跳出循环
为啥列表和字符串可以迭代?
满足了一种接口,.__iter__(),__getitem__()
iter() 去找.__iter__(),__getitem__(),没找到则为不可迭代
迭代器对象只有一个__next__()方法,都迭代完毕,抛出一个异常
如何实现这个案例?
某软件要求,从网络抓取个城市的气温信息,并依次显示:
北京: 15~20
天津: 17~22
长春: 12 ~18
...
出现一个问题,如果一次抓取所有城市信息再显示,会有很大的延迟,并浪费存储空间,用户体验并不好
如何解决这个问题?
实现一个迭代器对象,next方法返回每一个城市天气
实现一个可迭代对象,__iter__方法返回一个可迭代对象
代码逻辑:
列表、字符串
for循环的本质?
for循环要确保in后面的对象为可迭代对象,如何确保?
iter() 方法得到一个迭代器对象
不停.__next__() 方法对迭代器对象进行迭代,直到捕获StopIteration异常跳出循环
为啥列表和字符串可以迭代?
满足了一种接口,.__iter__(),__getitem__()
iter() 去找.__iter__(),__getitem__(),没找到则为不可迭代
迭代器对象只有一个__next__()方法,都迭代完毕,抛出一个异常
如何实现这个案例?
某软件要求,从网络抓取个城市的气温信息,并依次显示:
北京: 15~20
天津: 17~22
长春: 12 ~18
...
出现一个问题,如果一次抓取所有城市信息再显示,会有很大的延迟,并浪费存储空间,用户体验并不好
如何解决这个问题?
实现一个迭代器对象,next方法返回每一个城市天气
实现一个可迭代对象,__iter__方法返回一个可迭代对象
代码逻辑:
#!/usr/bin/python3 import requests import json from collections import Iterator, Iterable class WeatherIterator(Iterator): """ 迭代器 """ def __init__(self, cites): # 初始cities参数和index参数 self.cites = cites self.index = 0 def get_weather(self, city): # 获取天气信息 r = requests.get('http://wthrcdn.etouch.cn/weather_mini?city=' + city) data = json.loads(r.text)['data']['forecast'][0] return '%s: %s, %s' % (city, data['low'], data['high']) def __next__(self): # next方法进行迭代,每次next都会取一个值交给get_weather函数处理并返回处理的值 if self.index == len(self.cites): raise StopIteration city = self.cites[self.index] self.index += 1 return self.get_weather(city) class WeatherIterable(Iterable): """ 可迭代对象 """ def __init__(self, cites): self.cites = cites def __iter__(self): return WeatherIterator(self.cites) if __name__ == '__main__': # 查询的城市 cites = ['长沙', '深圳', '株洲', '衡阳', '昆明'] # 实现实时查询 for x in WeatherIterable(cites): print(x)
相关文章推荐
- python-6-如何实现可迭代对象和迭代器对象?
- python 3-1 如何实现可迭代对象iterable和迭代器对象iterator,__iter__,__getitem__
- python 3-2 如何实现可迭代对象和迭代器对象(2) BookIterable/BookIterator
- 如何实现可迭代对象和迭代器对象
- 迭代器就是重复地做一些事情,可以简单的理解为循环,在python中实现了__iter__方法的对象是可迭代的,实现了next()方法的对象是迭代器,这样说起来有
- python-7-如何使用生成器函数实现可迭代对象?
- 【慕课网】如何实现 可迭代对象和迭代器对象(天气查询)
- 如何实现可迭代对象和迭代器对象
- python_如何使用生成器实现可迭代对象?
- Python高级编程--如何实现可迭代对象和迭代器对象?(未完待续)
- python如何使用生成器函数实现可迭代对象
- 如何实现可迭代对象和迭代器对象(二)
- python 3-6 如何在一个for语句中迭代多个可迭代对象zip/itertools.chain
- 完全理解Python迭代对象、迭代器、生成器
- Python可迭代对象,迭代器,生成器的区别
- python-10-如何在一个for语句中迭代多个可迭代对象?
- 如何用迭代器的方式实现树的前序迭代感觉挺好玩的
- 理解Python迭代对象、迭代器、生成器
- 第八章 Python可迭代对象、迭代器和生成器
- Python 迭代器与可迭代对象