Python全栈day18(迭代器协议和for循环工作机制)
一,什么是迭代和递归
递归和迭代都是循环的一种。
简单地说,递归是重复调用函数自身实现循环。迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结果作为下一次循环计算的初始值。
二,什么是迭代器协议
1.迭代器协议是指:对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代 (只能往后走不能往前退)
2.可迭代对象:实现了迭代器协议的对象(如何实现:对象内部定义一个__iter__()方法)
3.协议是一种约定,可迭代对象实现了迭代器协议,python的内部工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。
PS:(字符串,列表,元祖,字典,集合,文件对象)这些都不是可迭代对象,只不过在for循环,调用了他们内部的__iter__方法,把他们变成了可迭代对象6
列子 day18-2.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | x = 'hello' iter_test = x.__iter__() print (iter_test) print (iter_test.__next__()) print (iter_test.__next__()) print (iter_test.__next__()) print (iter_test.__next__()) print (iter_test.__next__()) <str_iterator object at 0x000002E0DA335978 > h e l l o |
如果取完了还继续迭代会报错StopIteration
文件也是使用这种方法转换成可迭代对象
1 2 3 4 | f = open ( 'test.txt' , 'r+' ) iter_f = f.__iter__() print (iter_f.__next__()) print (iter_f.__next__()) |
使用while取模拟for循环做的事情
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | l = [ 1 , 2 , 3 ] diedai_l = l.__iter__() while True : try : print (diedai_l.__next__()) except StopIteration: print ( '迭代完毕,循环终止' ) break 1 2 3 迭代完毕,循环终止 |
以上可以使用内置函数next进行操作day18-4.py
1 2 3 | l = [ 1 , 2 , 3 , 4 ] iter_l = l.__iter__() print ( next (iter_l))<br><br> 1 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!