python迭代-可迭代对象与迭代器对象
可迭代对象与迭代器对象
问题举例
某软件要求,从网络抓取各个城市的气温信息,并依次显示:
北京:15~22
上海:18~23
......
如果一次抓取所有城市气温信息再显示,显示第一个城市的气温时会由很长的延时,
并且浪费存储空间,我们期望以“用时访问”的策略,并且把所有城市的气温信息封装
到一个对象里,可用for语句进行迭代。
for循环工作流程
来个栗子
list1 = [1, 2, 3, 4, 5] for ele in list1:print(ele)it = iter(list1) next(it) next(it) next(it) next(it) next(it) next(it)
for循环中in后面的对象一定为可迭代对象
iter()返回一个可迭代器对象,由可迭代对象生成
next()方法对迭代器对象进行迭代
最后报异常StopIteration
迭代器
迭代器对象为一次性消费,用完不可再生,
如果要使用,需要重新拿到迭代器,
两个迭代器之间无干扰。
栗子
list1 = [1, 2, 3, 4, 5]it1 = iter(list1) print(next(it1)) #1 print(next(it1)) #2print("\nfor loop") for x in it1:print(x)#3 #4 #5print("\nNo interference between two iters") it2 = iter(list1) it3 = iter(list1) print(next(it2)) #1 print(next(it3)) #1 print(next(it2)) #2 print(next(it3)) #2
迭代器对象是一个可迭代对象又是一个迭代器对象,调用可迭代接口(__iter__)返回它自身。
可迭代对象每次都创建一个迭代器。
解决思路
STEP1:实现一个迭代器对象WeatherIterator,__next__每次返回一个城市的气温信息
STEP2:实现一个可迭代对象WeatherIterable,__iter__方法返回一个WeatherIterator对象
代码:
from collections import Iterable, Iterator import requestsclass WeatherIterator(Iterator):def __init__(self, cities):self.cities = citiesself.index = 0def __next__(self):if self.index == len(self.cities):raise StopIterationcity = self.cities[self.index]self.index += 1return self.get_weather(city)def get_weather(self, city):url = 'http://wthrcdn.etouch.cn/weather_mini?city=' + cityr = requests.get(url)data = r.json()['data']['forecast'][0]return city, data['high'], data['low']class WeatherIterable(Iterable):def __init__(self, cities):self.cities = citiesdef __iter__(self):return WeatherIterator(self.cities)def show(w):for x in w:print(x)w = WeatherIterable(['北京', '上海', '广州'] * 10) show(w)
参考资料:python3实用编程技巧进阶
转载于:https://www.cnblogs.com/marton/p/10754241.html
python迭代-可迭代对象与迭代器对象相关推荐
- 传入json对象_【Python基础】可迭代对象amp;迭代器对象及其实现
可迭代对象 首选确保for循环的in后面是一个可迭代对象,这样就能通过python内置函数iter()得到一个迭代器对象(iterator) 我们分别把列表list_test和字符串str_test分 ...
- python——常见内置函数、可迭代对象与迭代器对象
目录 一.常见内置函数 1.abs() 2.all()与any() 3.bin() oct() hex() 4.int() 5.bytes() 6.callable() 7.chr() ord() 8 ...
- python中常用的内置函数,可迭代对象,迭代器对象
知识点1 :常用内置函数 1 常用内置函数的实际应用 1.1 abs() 返回值是一个绝对值,参数可以是整数和浮点数,如果参数是一个复数,则返回它的模. print(abs(-12.3)) # 12. ...
- python学习Day14 带参装饰器、可迭代对象、迭代器对象、for 迭代器工作原理、枚举对象、生成器及生成表达式...
复习 函数的嵌套定义:在函数内部定义另一个函数 闭包:被嵌套的函数 -- 1.外层通过形参给内层函数传参 -- 2.返回内部函数对象----> 延迟执行, 开放封闭原则: 功能可以拓展,但源代 ...
- 十八、可迭代对象、迭代器对象和生成器
可迭代对象.迭代器对象和生成器 一 可迭代对象 二 迭代器对象 三 迭代器优缺点 三 for循环原理 四 异常处理 4.1 什么是异常 4.2 异常操作 4.2.1 语法 4.2.2 实际操作 4.2 ...
- 可迭代对象与迭代器对象
可迭代对象与迭代器对象 1 > 常见的内置函数2 1.1 > help() 查看注释信息 1.2 > id() 返回一串相当于内存地址的数字 1.3 > int() 类型转换. ...
- Python可迭代对象和迭代器对象详解
1.可迭代对象 ''' 迭代对象是一个自身可迭代(__iter__)或者序列(_getitem__) '''# 迭代例子,列表和字符串是可迭代对象 l = [1, 2, 3, 4] s = 'abcd ...
- 可迭代对象和迭代器对象
可迭代对象(iterable)和迭代器对象(iterator)的概念是如此相似,常常容易混淆,今天就来梳理区分一下. 可迭代对象 可迭代对象简单来说这个对象是可以迭代的,例如 list,tuple,s ...
- python可迭代对象,迭代器,生成器
容器是一系列元素的集合,str.list.set.dict.file.sockets对象都可以看作是容器,容器都可以被迭代(用在for,while等语句中),因此他们被称为可迭代对象. 可迭代对象实现 ...
最新文章
- 服务器默认字符集 网页乱码,关于apache默认字符集乱码的问题
- 用PHP控制Nagios进程
- 关于jquery与dom元素转换
- C# WPF文本框TextEdit不以科学计数法显示
- K8S精华问答 | Kubernetes集群不能正常工作,难道是防火墙问题?
- Arduino笔记-呼吸流水灯
- Rabbitmq专题:rabbitmq消费端如何做限流?
- zabbix 时间错误_监控的朋友看过来,官方社区专家开源的Zabbix报表系统
- 深度学习机器72小时自学国际象棋达到大师水平
- BigDecimal的add方法
- Unity基础组件及介绍
- SocksCap64应用程序通过SOCKS代理
- Originpro使用技巧
- 如何从Linux里面下载软件
- selenium+python基本知识
- unison+inotify数据实时双向同步
- 大数据真实案例:Spark在美团的实践
- FTDI 2232H GPIO设置 NAND Read
- iOS设备数据恢复工具:UltData mac中文版
- 程序员都是吃青春饭,40岁以后怎么办?转行大数据是不错的选择