劳动人民万岁(拒绝惰性)------- 浅谈迭代对象(Iterable) 迭代器(Iterator)
一.前戏
问题:如果一次抓取所有城市天气 再显示,显示第一个城市气温时有很高的延时,并且很浪费储存空间
解决方案:以“用时访问”策略,并且能把说有城市气温封装到一个对象里,可用for一句进行迭代
二.上码
# -*- coding: utf-8 -*-
import requests
from collections import Iterable, Iterator # 可迭代对象 迭代器 (凡是可以for循环的,都是Iterable 凡是可以next()的,都是Iterator)
class WeatherIterator(Iterator): # 迭代器
def __init__(self, cites):
self.cites = cites
self.index = 0
def getweather(self, city):
w = requests.get(u'http://wthrcdn.etouch.cn/weather_mini?city=' + city) # 获取天气数据
data = w.json()['data']['forecast'][0]
return '%s:%s,%s' % (city, data['low'], data['high'])
# def __iter__(self):
# return self
def __next__(self):
if self.index == len(self.cites):
raise StopIteration # 迭代完成抛出异常
city = self.cites[self.index]
self.index += 1
return self.getweather(city)
class WeatherIterable(Iterable): # 可迭代对象
def __init__(self, cites):
self.cites = cites
def __iter__(self):
WeatherIterator(self.cites)
for x in WeatherIterator([u'北京', u'上海', u'广州', u'成都', u'天津', u'海南']):
print(x)
------------------------------------------------------备注----------------------------------------------------------------------------
# raise语法格式如下:
#
# raise [Exception [, args [, traceback]]]
# 语句中 Exception 是异常的类型(例如,NameError)参数标准异常中任一种,args 是自已提供的异常参数。
#
# 最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
# 当程序出现错误,python会自动引发异常,也可以通过raise显示地引发异常。一旦执行了raise语句,raise后面的语句将不能执行。
迭代器是一个对象,而生成器是一个函数,迭代器和生成器是python中两个非常强大的特性,编写程序时你可以不使用生成器达到同样的效果,但是生成器让你的程序更加pythonic。
创建生成器非常简单,只要在函数中加入yield语句即可。函数中每次使用yield产生一个值,函数就返回该值,然后停止执行,等待被激活,被激活后继续在原来的位置执行。
分类:
python
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee