Python的一些进阶学习-2017.08.14
来源:互联网 发布:吉郎pop美工族手册 编辑:程序博客网 时间:2024/06/18 16:02
首先应该先理解几个东西:
L=[1,2,3,4,5]for i in l : print i #这里的l就是一个可迭代对象, 其实迭代过程是调用l.__inter__接口,p= iter(l) #这里的p就是一个迭代器对象, p.next 进行迭代访问直到访问完
其次,标准库collections 里面有两个超好用的Iterable,Iterator 的类 分别对应到可迭代对象和迭代器对象
In [2]: Iterable.__abstractmethods__ Out[2]: frozenset({'__iter__'}) In [3]: Iterator.__abstractmethods__ Out[3]: frozenset({'next'})
其实个人理解可迭代器对象 其实就是对象为可迭代的字符串,列表的数据类型, 而迭代器对象就是指的对象为迭代对象,拥有next的方法去迭代对象;
话不多说,来个小案例 ,通过抓取某网站的天气预报,依次显示所需信息。要求为一次抓取所需城市的天气再显示,会有很高的延时,且浪费存储空间,但是如果用“用时访问”的策略,将所有的需要的城市的气温封装到一个对象里,用for去迭代:
from collections import Iterable,Iterator class weatheriterator(Iterator): #构造一个迭代器 def __init__(self,cities): self.cities=cities #记录迭代的位置 self.index= 0 def get_weather(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']) #迭代器对象需构造next方法 def next(self): if self.index==len(self.cities): raise StopIteration city = self.cities[self.index] self.index +=1 return self.get_weather(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'杭州',u'南通']): print xhadoop@ubuntu:~/pyfile$ python iterato.py北京:低温 25℃,高温 36℃上海:低温 29℃,高温 37℃广州:低温 26℃,高温 32℃杭州:低温 28℃,高温 38℃南通:低温 26℃,高温 34℃
简单的通过request爬了天气,再通过建立迭代器和可迭代对象来迭代访问抓取数据~
阅读全文
0 0
- Python的一些进阶学习-2017.08.14
- Python的一些进阶学习-2017.08.07
- Python的一些进阶学习-2017.08.10
- Python的一些进阶学习-2017.08.16
- Python的一些进阶学习-2017.08.28
- Python的一些进阶学习-2017.10.17
- python 进阶学习之14
- JavaScript进阶学习的一些建议
- JavaScript进阶学习的一些建议
- JavaScript进阶学习的一些建议
- 十分钟学习Python的进阶语法
- 十分钟学习Python的进阶语法
- 十分钟学习Python的进阶语法
- Python的学习笔记(二)(进阶)
- 用python写爬虫的一些技巧:进阶篇
- python学习--进阶篇
- python 进阶学习
- Python进阶学习
- 跨数据库分布式实时事务
- SpringCloudConfig相关配置
- java8新特性
- java*根据两个时间获得两个时间之间的日期集合
- PYTHON 字符串转换为二进制字符串,二进制字符串转换为字符串
- Python的一些进阶学习-2017.08.14
- C++注释规范
- 关于“如何保证自己开发的软件只能在一台电脑上运行问题”的思考
- sql语句优化
- 【数据结构】中缀表达式转换为后缀表达式
- java 推箱子 两个箱子 两个位置 ,练习java二维数组
- POJ.3667 Hotel ( 线段树 )
- 考试规律
- css外边距合并