Python 高级特性(5)- 迭代器 Iterator
前言
迭代器貌似是 Python3 才有的(猜的),在廖雪峰大神的网站中 Python2 是没有迭代器一栏的
可 for 循环的对象
- 常见集合数据类型(迭代对象):list、tuple、dict、set、str
- 生成器 generator
可迭代对象(Iterable)
可以直接用 for 循环的对象都叫可迭代对象
关于 Iterable 的文章可以再看看这篇
https://www.cnblogs.com/poloyy/p/14658433.html
复习下生成器
它可以用 for 循环拿到下一个值,也可以用 .next() 函数来拿到下一个值
迭代器(Iterator)
可以通过 .next() 函数调用并不断返回下一个值的对象就是迭代器
如何判断是不是迭代器
可以使用 isinstance() 判断一个对象是否是 Iterator 对象
print(isinstance([], Iterator)) print(isinstance({}, Iterator)) print(isinstance("test", Iterator)) print(isinstance(1234, Iterator)) print(isinstance([x for x in range(2)], Iterator)) print(isinstance((x for x in range(2)), Iterator)) print(isinstance(enumerate([]), Iterator)) # 输出结果 False False False False False True True
生成器都是 Iterator 对象,但 list、dict、str 虽然是 Iterable ,却不是 Iterator
如何变成 Iterator
把 list、dict、str 等 Iterable 变成 Iterator 可以使用 iter() 函数
print(isinstance(iter([]), Iterator)) print(isinstance(iter({}), Iterator)) print(isinstance(iter("test"), Iterator)) print(isinstance(iter([x for x in range(2)]), Iterator)) # 输出结果 True True True True
注意:非 iterable 对象不能调用这个方法哦,比如整型
为什么 list、dict、str 等数据类型不是 Iterator
- Iterator 对象表示的是一个数据流,Iterator 对象可以被 next() 函数调用并不断返回下一个数据,直到没有数据时抛出 StopIteration 错误
- 可以把这个数据流看做是一个有序序列,但我们却不能提前知道序列的长度,只能不断通过 next() 函数实现按需计算下一个数据,所以 Iterator 的计算是惰性的,只有在需要返回下一个数据时它才会计算
- Iterator 甚至可以表示一个无限大的数据流,例如全体自然数。而使用list是永远不可能存储全体自然数的
总结
- 凡是可作用于 for 循环的对象都是 Iterable 类型
- 凡是可作用于 next() 函数的对象都是 Iterator 类型,它们表示一个惰性计算的序列
- 集合数据类型如 list、dict、str 等是 Iterable 但不是 Iterator,不过可以通过 iter() 函数获得一个 Iterator 对象
- Python 的 for 循环本质上就是通过不断调用 next() 函数实现的
标签:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具