迭代器
迭代器
迭代
指的是重复迭代,每一次迭代都是基于上一次的结果而来的
迭代器
迭代器指的是迭代取值的工具,它可以迭代取值
可迭代对象
str , list , dict , set , tuple , 文件open('a.txt')
所有的序列类型,凡是内部有.__iter__()内置方法的都是可迭代对象
获取迭代器
可迭代对象.__iter__() 得到的返回值就是“迭代器对象”
迭代器如何取值
迭代器对象.__next__() 每执行一次都会从跌打器对象中去走一个值
s = "迭代器"
str_iter = s.__iter__()
print(str_iter.__next__())
print(str_iter.__next__())
print(str_iter.__next__())
# print(str_iter.__next__()) # 多执行一次就会报错StopIteration,因为迭代器中的值已经取完了
>>>
迭
代
器
可迭代对象 vs 迭代器对象
1、获取可迭代对象:直接定义序列类型(str , list , tuple , dict , set , f)
特点:内置有__ iter __()
2、获取迭代器对象:通过可迭代对象调用得到返回值,可迭代对象.__ iter __()
特点:内置有__ next __()
迭代器对象的优点
优点:
1、不依赖索引迭代取值
2、节省内存空间
缺点:
1、取指定某个值麻烦
2、每次取值都要从第一个值开始,无法通过索引取值
3、无法获取长度
for循环原理
语法:for i in 可迭代对象:
in:可迭代对象--->内部会自动调用.__ iter__()--->迭代器对象
用 for i in 可迭代对象:就是调用迭代器对象.__ next__()
for循环内部也会有一个捕获异常机制,一旦遇到异常也会停止取值。
list1 = [1, 2, 3, 4]
for line in list1: # list1是可迭代对象 ----> 内部会自动调用.__iter__() ---> 迭代器对象
# 迭代器对象.__next__()
print(line)
迭代器本质上是一个可迭代对象
文件既是可迭代对象,也是迭代器对象
可迭代对象不一定是迭代器对象
try: / except StopIteration:
迭代器取值当取完后并不知道,多取一次就会报错,因此我们用try:和except StopIteration:防止报错
# 如果没有使用try
list1 = [1, 2, 3, 4]
list1_iter = list1.__iter__()
while True:
print(list1_iter.__next__())
>>>
1
Traceback (most recent call last):
2
3
File "E:/Python/练习/迭代器.py", line 25, in <module>
4
print(list1_iter.__next__())
StopIteration
# 使用try
list1 = [1, 2, 3, 4]
list1_iter = list1.__iter__()
while True:
try:
print(list1_iter.__next__())
except StopIteration:
break
>>>
1
2
3
4
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!