Python之鸭子类型:for循环的本质,进一步解析迭代协议
off999 2024-11-01 12:53 35 浏览 0 评论
引言
在前面的文章中,我们简单介绍了Python中的可迭代对象、迭代器、以及迭代协议的概念。今天就for这个用得特别多,觉得很熟悉很简单的语法结构,稍微展开一下,从而更好地加深对迭代协议的理解。
本文的主要内容有:
1、迭代协议与两个内置函数
2、for循环的本质
3、代码验证实例
迭代协议与两个内置函数
这里再来简单回顾一下迭代协议的概念,所谓“迭代协议”,是Python中为遍历对象定义的一组规则。具体来说,一个对象要遵循迭代协议,它需要实现以下两个方法:
1、__iter__():返回一个迭代器对象。
2、__next__():返回下一个元素,如果没有更多元素,则抛出StopIteration异常。
为了支持迭代协议,以及更好地利用迭代协议,Python中还有两个内置函数,需要提前了解以下:
1、iter():返回对象的迭代器,等价于调用对象的__iter__()方法。
函数的定义及描述如下:
2、next():从迭代器中获取下一个元素,等价于调用迭代器的__next__()方法。如果提供了默认值,则会在遇到StopIteration异常时返回该默认值。
函数的定义及描述如下:
for循环的本质
for循环的本质是获取一个可迭代对象的迭代器,并通过反复调用迭代器的__next__()方法来获取元素,直至抛出StopIteration异常为止。
一个for循环更加详细的执行步骤是这样的:
1、获取迭代器
调用可迭代对象的__iter__()方法,获取并返回一个迭代器对象。
2、初始化迭代器
迭代器对象必须实现了__iter__()方法并返回自身,以便在需要嵌套的情况下能够重用。
3、获取下一个元素
在每次循环迭代的过程中,调用迭代器对象的__next__()方法,获取下一个元素。
4、处理元素
在每次循环迭代的过程中,将获取到的元素绑定到循环变量,并执行循环体中的代码。
5、检测结束
如果__next__()方法抛出了StopIteration异常,则for循环终止。
6、清理工作
执行任何必要的清理工作,如释放资源、处理异常等。
代码验证实例
接下来我们通过一个代码实例来验证上述的for循环执行过程:
# 定义一个团队的类,是一个可迭代对象
class Team:
def __init__(self, dgrs):
self.dgrs = dgrs
def __iter__(self):
print(f'Team.__iter__()被调用')
return TeamIterator(self.dgrs)
# 定义一个用于迭代Team的迭代器
class TeamIterator:
def __init__(self, dgrs):
print('TeamIterator实例被创建并初始化')
self.dgrs = dgrs
self.index = 0
def __iter__(self):
print(f'TeamIterator.__iter__()被调用')
return self
def __next__(self):
print(f'TeamIterator.__next__()被调用')
try:
dgr = self.dgrs[self.index]
except IndexError:
raise StopIteration
self.index += 1
return dgr
if __name__ == '__main__':
team = Team(['张三', '李四', '赵大头'])
for dgr in team:
print(dgr)
简单解释一下代码,Team类实现了__iter__()方法,就是我们前面已经提到的,Team类是可迭代的,Team的实例对象都是可迭代对象。TeamIterator类同时实现了__iter__()方法和__next__()方法,是一个迭代器。
在对应的方法中我们添加了print()输出,从而当我们通过for循环遍历Team的可迭代对象时,更加清晰地看到for地执行过程。
执行结果:
既然已经知道了for循环的执行过程,其实,我们可以不用for语法结构,自行模拟实现for循环对可迭代对象的迭代遍历,这就要用到我们前面提到的两个内置函数iter()和next()了。
直接看代码:
if __name__ == '__main__':
team = Team(['张三', '李四', '赵大头'])
team_iter = TeamIterator(team.dgrs)
while True:
try:
dgr = next(team_iter)
print(dgr)
except StopIteration:
break
执行结果:
跟for循环时完全一致的。
总结
本文首先简单回顾了Python中迭代协议的概念,同时介绍了两个内置函数iter()和next()。然后介绍了Python中for循环的本质及详细执行过程。最后通过自定义可迭代对象、迭代器来验证了for循环的执行过程,以及通过两个内置函数,使用while循环模拟for循环的执行过程。
以上就是本文的全部内容了,希望对您能有所帮助。
相关推荐
- adobe flash player播放器(adobe flash player viewer)
-
不同操作系统不同浏览器,开启Adobeflashplayer的方法各有不同。开启的前提当然是正确安装喽,不同操作系统不同浏览器安装Adobeflashplayer方法也是各不相同的。Wind...
- 央视cctv5体育直播(央视cctv5体育直播在线观看免费)
-
现在全国每家都有机顶盒,在机顶盒上就可以看CCTV所有频道。也可以用手机浏览器搜索CCTV5体育频道。还有就是可以手机上下载安装央视影音APP,央视频APP都可以看。中央电视台体育频道(频道呼号:CC...
-
- 直播平台app下载大全(直播平台app下载大全免费)
-
专门观看淘宝直播的APP是点淘,这款APP是这段时间才出的,我下载了一个,但是我下载这款APP不是为了买东西当时也是看广告连接才点进去的,它这上面是可以赚一些零花钱,我下载之后他给了我七块钱,然后现在每天弄不弄也能弄个一块钱左右。但是里边的...
-
2026-01-19 01:15 off999
- 网络播放器app(网络播放器怎么连接电视机)
-
牛片APP一站式影视智能功能,几乎可以满足影视人工作中的所有需求。包含的功能有:文字转语音、真人配音、自动加字幕、一键去水印、提词器、拍片估价、堪景神器、影视课程、发布影视相关需求、接单赚钱....等...
- audition(audition属于什么软件)
-
Audition是一款由Adobe开发的音频编辑和混音软件,具有以下主要功能:1.音频录制和编辑:可以录制不同类型的音频,包括对话、音乐、戏剧和环境声音等,还可以使用多种音频效果处理工具对录制...
- office2020官方下载免费完整版
-
Microsoft365和Office2020的区别有以下几点:功能不同。Office2020包含Word、Excel、PowerPoint等组件,功能比较全面;而Microsoft365包...
- 微信管理软件(微信管理)
-
微信管理,可以一键将消息发送到多个群,不限制群数量和次数选择好群组发送消息即可。“里德助手”多消息群发,可以设置多条消息发送,包括图文、小程序,公众号,文章等都是可以的。亲密群发,逢年过节,总是要给...
-
- 优酷视频下载安装2025最新版本
-
2022爱奇艺腾讯优酷会员,要根据具体的需求来选择。喜欢青春偶像剧类型的可以选择爱奇艺视频;喜欢一些自制综艺和自制剧的优酷视频会员是不错的选择;腾讯视频定位就是主打大IP剧和一些热门综艺的转播,一般卫视播出的都会出现在腾讯视频有这方面需...
-
2026-01-19 00:03 off999
- 火辣辣的小说网(火辣辣的小说网名)
-
《司夜爵姜笙》。内容简介:今天是她的婚礼,可新郎司夜爵没有出现。姜笙站在台上,耳边充斥着满座亲朋的窃窃私语。想哭吗?想。可她要真哭出来,场面就更难看了。姜笙固执的站在那儿看着教堂大门。可看着天色从亮到...
- 小程序如何转换成word文档(小程序怎么转文档格式)
-
小程序文件一般是以小程序的代码形式存在的,不能直接转换成文档。如果需要将小程序中的文本内容转换为文档,可以尝试手动复制粘贴到文档编辑器中,或者使用相关的工具或软件进行批量转换。但是,需要注意版权问题和...
- 百度云网盘资源链接(百度云网盘资源链接群组小众圈子)
-
如果您想从网盘中提取网址,可以按照以下步骤操作:1.打开您的网盘,找到您想提取网址的文件或文件夹。2.右键单击该文件或文件夹,选择“复制链接”或“获取链接”等选项。3.将复制的链接粘贴到浏览器地...
-
- pr软件下载手机版(pr软件官方下载)
-
pr2019的软件安装较为简单,点击setup.exe应用程序之后,在弹出的界面设置安装选项:1、语言2、安装路径。这里的语言默认选择中文。默认的安装路径在c盘,推荐安装的非系统盘的盘符中,比如D盘。单击文件后进行路径的指定,指定完成后默认...
-
2026-01-18 23:03 off999
- 音乐剪辑软件免费版(音乐剪辑用什么免费软件)
-
CoolEditPro2.0或2.1CoolEditPro是一款既能支持声音录制,也能支持声音编辑与合成的多功能软件,利用这样的软件,你可以将自己满意的歌声或者喜欢的歌曲录制下来。该软件支持从多种声音...
-
- wifi密码查看密码器下载(wifi密码查看密码器下载官方)
-
在手机的应用商店里,然后找到万能钥匙,点击下载。下载完成后直接安装在桌面上就可以了。在你电话应用里面下载万能钥匙,就自动会出现在桌面上了感觉WiFi共享精灵最好用,WiFi共享精灵是一款电脑搭建免费wifi热点必备软件,电脑安装,一键...
-
2026-01-18 22:43 off999
欢迎 你 发表评论:
- 一周热门
- 最近发表
- 标签列表
-
- python计时 (73)
- python安装路径 (56)
- python类型转换 (93)
- python进度条 (67)
- python吧 (67)
- python的for循环 (65)
- python格式化字符串 (61)
- python静态方法 (57)
- python列表切片 (59)
- python面向对象编程 (60)
- python 代码加密 (65)
- python串口编程 (77)
- python封装 (57)
- python写入txt (66)
- python读取文件夹下所有文件 (59)
- python操作mysql数据库 (66)
- python获取列表的长度 (64)
- python接口 (63)
- python调用函数 (57)
- python多态 (60)
- python匿名函数 (59)
- python打印九九乘法表 (65)
- python赋值 (62)
- python异常 (69)
- python元祖 (57)
