上一篇博文我们使用Python制作了一个简单的天气预报小程序(天气渐冷,Python小工具让你随时掌握气温变化,做温暖的穿衣达人)。今天,需求有变,如果我们想去旅游,备选方案有北京、上海、广州、新疆等等很多个城市……我们又不知道该选择哪个?那就看下这些城市最近的天气吧!毕竟,为了一段旅程把自己搞生病了也不太值得……

如果使用上一篇文章中的小程序,我们每次只能获取到一个城市的天气数据,不好进行对比,而且很浪费时间。有没有办法一次性将你方案中的城市天气预报一次性打印输出呢?

如何实现这一需求?

今天,我们就是用迭代器和可迭代对象的原理来实现这一需求。

迭代器对象和可迭代对象

我们知道,Python中迭代器对象,它实现了__next__()方法,当它调用__next__()方法时,返回其中的下一个元素。它不像列表、元组那样一旦生成,就会一次性占用内存空间,它使得我们需要用到迭代器对象里面的元素时,就调用它,平时它不会占用太多内存空间。比如,打开一个大文件,我们可以将文件内容定义为一个迭代器对象。我们使用__next__()方法获取它的下一个迭代内容(Python2.X直接使用next()方法),这样操作可以提升程序性能。

我们通常使用的列表、字典、元组、字符串等等这些数据结构称为可迭代对象(Iterable),它内部实现了__iter__()方法,外部使用iter()方法可以将它转化为一个可迭代对象。但它们不是迭代器(Iterator),只是通过iter()方法可以将这些对象转化为可迭代对象。

迭代器和可迭代对象的区别在于迭代器是用时访问数据,不浪费或者很少浪费内存空间,而可迭代对象范围更加广泛。本质来讲,迭代器就是一种可迭代对象,从编程角度分析可迭代对象就是对象中定义了__iter__()、__getitem__()等魔法方法的对象。我们实例来看一下这两者的区别在哪里?如下图所示。

可迭代对象和迭代器的区别图示

制作一个天气预报小程序(使用迭代器和可迭代对象)

通过上面的分析我们知道了迭代器对象和可迭代对象的区别。当我们需要知道很多个城市的天气情况时,先定义一个迭代器对象MyWeatherIterator,继承Iterator对象,并自定义它的__next__()方法。然后,我们将该迭代器对象封装成一个可迭代对象MyWeatherIterable(继承Iterable对象,并实现它的__iter__()方法)。这样,我们就可以像列表、元组等数据结构一样便利地获取其中的信息,而且这样的自定义对象在降低内存消耗方面也很有优势。

首先,定义迭代器对象

具体代码如下图所示。

天气预报迭代器对象

然后,将迭代器对象封装成一个可迭代对象

这一步相对来说较为简单,实现它的__iter__()方法,代码如下所示。

将迭代器对象封装成可迭代对象

最后,我们获取想要知道城市的天气信息

以下面的列表为例:

cities_lst = ['北京', '上海', '广州', '深圳', '海南', '新疆', '敦煌', '西安']

for item in MyWeatherIterable(cities_lst):

print(item)

我们来看下效果,如下所示。

有了它,妈妈再也不担心我感冒了

城市:北京【穿衣建议】:昼夜温差极大,且风力较强,极易发生感冒,请特别注意增减衣服保暖防寒。

【平均气温】:8

城市:上海【穿衣建议】:天凉,昼夜温差较大,较易发生感冒,请适当增减衣服,体质较弱的朋友请注意适当防护。

【平均气温】:15

广州【穿衣建议】:昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。

【平均气温】:22

城市:深圳【穿衣建议】:天气较凉,较易发生感冒,请适当增加衣服。体质较弱的朋友尤其应该注意防护。

【平均气温】:21

城市:海南【穿衣建议】:天气寒冷,且昼夜温差很大,极易发生感冒。请特别注意增加衣服保暖防寒。

【平均气温】:-1

城市:兰州【穿衣建议】:昼夜温差很大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。

【平均气温】:6

城市:西安【穿衣建议】:昼夜温差较大,较易发生感冒,请适当增减衣服。体质较弱的朋友请注意防护。

【平均气温】:14

嗯嗯,想去暖和一点地方嘛,广州、深圳是首选。极易发生感冒的地方就先不去了……

好了,今天的内容就到这里了,怎么样?迭代器和可迭代对象的区别你学会了吗?这可是一个很有Python特点的对象,学会自定义一个迭代器对象和可迭代对象,对于提升程序性能是很有用的,希望大家在使用Python处理大型网络数据流或者是文件流时,首选这两个对象。

未完待续

欢迎大家留言关注,持续会推出更有意思的Python实战项目。

转载请注明出处,百家号:Python高手养成

做一个python的旅游系统_有了它,妈妈再也不担心我感冒了,Python使用迭代器进行天气预报...相关推荐

  1. python画笑脸表情_用Matplotlib,妈妈再也不担心我没有表情包斗图了

    全文共3003字,预计学习时长6分钟 Netflix.Instagram.YouTube.电影还有电视剧,这些都有什么共同之处呢?它们都是视觉媒介,吸引着形形色色的观众. 今时今日,大部分人逐渐放弃读 ...

  2. 做一个python的旅游系统_我把全国旅游数据用Python爬下来后发现,这个地方才是真正的旅游胜地...

    前言: Python对于本人来讲也是一个在逐渐学习掌握的过程,这次的内容就从旅游开始讲起,进入正文前首先附(fang)上(du)最令我垂涎欲滴的海鲜盛宴. 数据爬取: 最近几天朋友圈被大家的旅行足迹刷 ...

  3. 基于python的旅游系统_基于python的去哪儿网旅游数据分析

    20011 基于python的去哪儿网旅游数据分析 运行视频.代码等: 链接:https://pan.baidu.com/s/1tw4Qvtcuwt7ys36M7HvLSg 提取码:1589 复制这段 ...

  4. 【Unity3d】 教会你如何做一个简单的电梯系统(升降平台)

    博主第一次写博客,语言略俗,有不足之处还请指正! 由于自己还处在unity小白阶段,受2d升降平台的影响(后续我也会上传关于2d升降平台的文章),突发奇想如何用3d做一个电梯系统,查阅网上资料后,发现 ...

  5. 用U盘做一个即插即用的unbuntu20系统

    用U盘做一个即插即用的unbuntu20系统 前言 因为常规安装方法会和硬件绑定,所以你在移动硬盘.U盘烧录了一个unbuntu,换一个系统就用不了.会很麻烦.所以这里用VMware做一个随身可带的系 ...

  6. 使用c#做一个书店买书系统

    用VS做一个书店智能售卖系统,运行结果如图所示 下面展示一些 内联代码片. // An highlighted blockint lvYe = 59;int chaHua = 46;int shiGe ...

  7. python绘制横向柱状图 妈妈再也不用担心我不会画图了

    python绘制横向柱状图 妈妈再也不用担心我不会画图了 前言 实现代码 成果 前言 事情要从一次画图开始说起 当我开开心心搞到一堆数据,以为能够休息的时候,这时候我突然想起来,是不是绘制成柱状图更直 ...

  8. 网易员工入职必学excel课程,妈妈再也不懂担心我做表哥/表姐了!

    更多秋招干货,上网易游戏学院app查看!https://game.academy.163.com/ssi/app/?referrer=csdn 通用技能研习社,源自网易游戏 网易独家管理秘籍,员工入职 ...

  9. python分布式爬虫系统_如何构建一个分布式爬虫:理论篇

    前言 本系列文章计划分三个章节进行讲述,分别是理论篇.基础篇和实战篇.理论篇主要为构建分布式爬虫而储备的理论知识,基础篇会基于理论篇的知识写一个简易的分布式爬虫,实战篇则会以微博为例,教大家做一个比较 ...

最新文章

  1. String对象不可修改指的是对象本身不可修改,而不是引用不可修改。
  2. windows环境下安装nodeJS和express,一直提示command not found-配置环境变量
  3. Rplidar学习(五)—— rplidar使用cartographer_ros进行地图云生成
  4. 伯颜的诗和“金佛”趣事
  5. k8s实战为aspnetcore.webapi微服务注入配置信息
  6. MySQL入门之事件
  7. SilverLight:布局(3)StackPanel 对象
  8. mysql 组复制 不一致_MySQL主从复制什么原因会造成不一致,如何预防及解决
  9. 灾难性遗忘_谷歌大脑新研究:单一任务强化学习遇瓶颈?「灾难性遗忘」的锅!...
  10. C语言libxml用法,c语言libxml2库的安装和使用.....
  11. 易语言pc微信hook最新版本
  12. javaw java_我可以找出java程序是使用java还是javaw启动的
  13. 全球及中国电力行业建设策略与十四五供需战略规划报告2021-2027年
  14. 有了雀巢智能咖啡机,单身狗离“秀恩爱”还会远吗?
  15. java 周几_java实现根据日期判断周几
  16. (转载)C# Dictionary
  17. 利用二次导数对函数凹凸性的证明
  18. 让Windows无缝地跑在Mac上,VMware发布VMware Fusion 7
  19. php WEB报表工具的设计
  20. python 主力资金_小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉...

热门文章

  1. 《HTTP权威指南》– 8.网关、机器人
  2. ubuntu14.04配置java jdk
  3. OpenCV学习(19) 细化算法(7)
  4. Android_图像渲染(Shader)
  5. Stella Forum v2 线上版开发总结
  6. linux make 命令行 定义宏(-D)传递给C源代码 简介
  7. python3 清除asyncio队列 方法
  8. python 中的*(星号)和**(双星号)简介
  9. python 利用 whoosh 搭建轻量级搜索
  10. mysql max_allowed_packet 参数 限制接受的数据包大小