博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
可迭代对象和迭代器生成器
阅读量:6215 次
发布时间:2019-06-21

本文共 1734 字,大约阅读时间需要 5 分钟。

"""iter(...)    iter(iterable) -> iterator    iter(callable, sentinel) -> iterator    Get an iterator from an object.  In the first form, the argument must    supply its own iterator, or be a sequence.    In the second form, the callable is called until it returns the sentinel."""# 可以由可迭代对象得到一个迭代器l = [1,2,3,4]print(iter(l)) # 
print(l.__iter__()) #
"""可迭代对象满足了迭代协议的一个接口 __iter__ 或者 __getitem__迭代器对象只有一个接口__next__next 可以得到迭代器中的下一个元素,最后一个元素被取出后,会抛出StopIteration异常for循环工作机制:1.由iter方法得到一个迭代器2.不停地调用next方法,直到捕获一个会抛出StopIteration异常,退出循环""""""如何实现可迭代对象和迭代器对象实际案例:某软件要求,从网络抓取各个城市的气温信息,并以此显示:北京:15-20天津:17-22长春:12-18....如果一次抓取所有的城市天气再显示,显示第一个城市气温时,有很高的延时,并且浪费存储空间。我们期望以“用时访问”策略,并且能把所有的城市气温封装到一个对象里,可用for语句进行迭代,如何解决?解决方案:1.实现一个迭代器对象WeatherIterator,next方法每次返回一个气温2.实现一个可迭代对象WeatherIterable,__iter__方法返回一个迭代器对象"""import requestsfrom collections import Iterable,Iteratorclass WeatherIterator(Iterator): """ 迭代器对象,满足__next__接口 """ def __init__(self,citys): self.citys = citys self.index = 0 def _getCityWeather(self,city): r = requests.get("http://wthrcdn.etouch.cn/weather_mini?city=%s" % city) data = r.json()['data']['forecast'][0] return "%s:%s-%s" % (city, data['low'], data['high']) def __next__(self): if self.index == len(self.citys): raise StopIteration city = self.citys[self.index] self.index += 1 return self._getCityWeather(city)class WeatherIterable(Iterable): """ 可迭代对象,满足__iter__接口 """ def __init__(self,citys): self.citys = citys def __iter__(self): return WeatherIterator(self.citys)citys = ['北京', '上海', '广州', '深圳']weather_obj = WeatherIterable(citys)for x in weather_obj: print(x)

 

转载地址:http://vosja.baihongyu.com/

你可能感兴趣的文章
String,StringBuffer与StringBuilder的区别??
查看>>
微软最有价值专家大中华峰会花絮视频
查看>>
iOS - AppRealTest App 真机测试
查看>>
如何把后台返回数据的根据某个选项去重新排序?
查看>>
Unity3D之Mecanim动画系统学习笔记(一):认识Mecanim动画系统
查看>>
Android4.42-Settings源代码分析之蓝牙模块Bluetooth总体实现(总)
查看>>
百度地图经纬度批量查找功能XGeocoding使用手册
查看>>
脚本中出现“+ $'\r' : command not found
查看>>
【Asp.net Core】在 Linux 子系统中安装 nginx 并配置反向代理
查看>>
怎么检测自己fastq的Phred类型 | phred33 phred64
查看>>
<5>Lua多返回值和require模块
查看>>
吐槽net下没有靠谱的FastDFS的sdk之使用thrift实现JAVA和C#互通
查看>>
viewpager+fragment滑动切换卡顿问题
查看>>
2018第52周日&技术人员如何面对裁员?
查看>>
InstallShield 2012 Spring新功能试用(3): 对微软最新技术的支持
查看>>
MySQL测试环境遇到 mmap(xxx bytes) failed; errno 12解决方法
查看>>
找出最慢的查询语句Find your slowest queries
查看>>
sql server 2000 按日期查找
查看>>
120行的俄罗斯方块(Javascript)
查看>>
iPhone开发之UITextView控件使用详解
查看>>