当前位置:
首页 > temp > python入门教程 >
-
Python 迭代器Iterator详情
1. 什么是迭代器?
- 迭代器是一个表示数据流的对象,当我们调用next()方法时会返回容器中的下一个值
-
迭代器中包含
__iter__
和__next__()
方法。通过__iter__
方法可以返回迭代器对象本身的方法。__next__()
方法会使cur指针始终指向当前位置,即返回容器中的下一个值,如果容器中没有更多元素了,则会抛出StopIteration异常。 - 迭代器(iterator)也是可迭代的对象(iterable)
2. 迭代器类型
- Python中支持容器进行迭代,同时也提供迭代器协议支持用户自定义类进行迭代
-
容器迭代器:
container.__iter__()
方法实现容器对象迭代 -
迭代器协议:
__iter__()
方法和__next__()
方法 -
__iter__()
:返回迭代器本身,容器可以与for...in结合使用 -
__next__()
:返回迭代器返回下一项
3. 迭代器分类
容器迭代器
data = [1,2,3,4] it = iter(data) print(next(it)) print(next(it))
- Python中提供的内置容器有:list、tuple、dictionary 和 set都是可迭代对象
- 调用iter()方法获取对应的迭代对象
- 调用next()方法获取迭代对象下一项值。每一次调用next之后,会自动往后移到到一位,获取后面一位的数据。
遍历迭代器
for i in it: print(i)
对于可迭代对象,我们也可以使用for...in来进行迭代
自定义迭代器
class Myiter: def __init__(self,times): self.times = times def __iter__(self): self.n = 0 return self def __next__(self): if self.n <= self.times: result = 3 ** self.n self.n += 1 return result else: raise StopIteration data = Myiter(4) it = iter(data) # 第1次 print(next(it)) # 第2次 print(next(it)) # 第3次 print(next(it)) # 第4次 print(next(it)) # 第5次 print(next(it)) # 第6次,超出范围触发StopIteration print(next(it)) ... 1 3 9 27 81 Traceback (most recent call last): File "E:\workspace\uiat\cookbooks\tester.py", line 67, in <module> print(next(it)) File "E:\workspace\uiat\cookbooks\tester.py", line 51, in __next__ raise StopIteration StopIteration ...
-
创建的对象/类需要实现
__iter__()
和__next__()
两个方法即可作为迭代器 - 迭代器中__iter__()返回迭代器本身方法
- 迭代器中__next__()方法允许进行其他操作,但是必须返回迭代器的下一项
- 为了防止迭代永远进行下去,Python提供stopIterator语句,终止迭代
总结
Python Iterator迭代器由__iter__()方法和__next__()方法组成。迭代器分为Iterator和iteratable两种,因此迭代器本身也是可迭代对象的。
迭代器分为容器迭代和自定义迭代。
出处:https://www.cnblogs.com/liuliumei/p/17030406.html
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
关于JS定时器的整理
JS中使用Promise.all控制所有的异步请求都完
js中字符串的方法
import-local执行流程与node模块路径解析流程
检测数据类型的四种方法
js中数组的方法,32种方法
前端操作方法
数据类型
window.localStorage.setItem 和 localStorage.setIte
如何完美解决前端数字计算精度丢失与数