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爬了天气,再通过建立迭代器和可迭代对象来迭代访问抓取数据~

原创粉丝点击