25. 迭代器和生成器的详解
创始人
2024-05-16 05:29:34
0

1. 迭代器

(1) 迭代是Python最强大的功能之一,是访问集合元素的一种方式。
(2) 迭代器是一个可以记住遍历的位置的对象。
(3) 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退
(4) 迭代器有两个基本的方法:iter() 和 next()
(5) 字符串,列表或元组对象都可用于创建迭代器

# 创建迭代器
list = [1,2,3,4]
it = iter(list)   # 创建迭代器对象
print(next(it))   # 输出迭代器的下一个元素
print(next(it))

在这里插入图片描述
(6) 迭代器对象也可以使用常规的for语句进行遍历。

list = [5,6,7,8]
it = iter(list)
for item in it:print(item, end=" ")
# 运行结果:> 5 6 7 8 

(7) 创建一个迭代器
把一个类作为一个迭代器使用需要在类中实现两个方法 __iter__()__next__()
[a]. __iter__() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了 __next__() 方法并通过 StopIteration 异常标识迭代的完成。
[b]. __next__() 方法(Python 2 里是 next())会返回下一个迭代器对象。

# 创建一个返回数字的迭代器,初始值为 1,逐步递增 1. 
class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):x = self.aself.a += 1return xmyIter = iter(MyNumbers())
print(next(myIter))
print(next(myIter))
print(next(myIter))
print(next(myIter))

在这里插入图片描述
(8) StopIteration

class MyNumbers:def __iter__(self):self.a = 1return selfdef __next__(self):if self.a <= 20:x = self.aself.a += 1return xelse:raise StopIterationmyiter = iter(MyNumbers())
for item in myiter:print(item, end=', ')

2. 生成器

(1) 在 python 中,使用了 yield 的函数被称为生成器。
(2) 跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器
(3) 在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
(4) 调用一个生成器函数,返回的是一个迭代器对象。

。。。。。。。。。。未完待续。。。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
修复 爱普生 EPSON L4... L4151 L4153 L4156 L4158 L4163 L4165 L4166 L4168 L4...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...