- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
第9章成员访问、迭代器与生成器
学习目标掌握利用特殊方法实现自定义的成员访问掌握迭代器的使用方法了解生成器的特点,掌握生成器的使用方法熟悉几种常用内置的可迭代对象及其使用方法22025/9/15
9.1成员访问利用特殊方法实现的自定义成员访问方式,可以实现一些特殊效果的对象,如以往由系统定义和实现的序列和映射等功能。32025/9/15
9.1.1基本的序列和映射规则 序列和映射是Python中的基本结构序列是以整数作为索引的结构类型,如列表、字符串等。序列是以键值作为索引的结构类型,如字典。 序列和映射基本上是元素(item)的集合,要实现它们的基本行为,不可变对象需要实现2个方法,而可变对象需要实现4个。42025/9/15
9.1.1基本的序列和映射规则__len__(self):返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。__getitem__(self,key):返回与指定键相关联的值。__setitem__(self,key,value):通过与键相关联的方式存储值,以便以后能够使用__getitem__来获取。__delitem__(self,key):对象的组成部分使用__del__语句时被调用,用于删除与key相关联的值。52025/9/15
9.1.1基本的序列和映射规则序列的键为负整数时,从末尾往前数。换而言之,x[-n]与x[len(x)-n]等效。如果键的类型不合适(如对序列使用字符串键),可能引发TypeError异常。对于序列,如果索引的类型是正确的,但不在允许的范围内,应引发 IndexError异常。62025/9/15
【例9-1】创建一个等差数列创建一个等差数列,且,其中k可由程序输入确定。72025/9/15defcheck_index(key):ifnotisinstance(key,int):raiseTypeErrorifkey0:raiseIndexErrorclassArithmeticProgression: def__init__(self,start=0,step=1):self.start=start self.step=step self.changed={}
【例9-1】创建一个等差数列82025/9/15def__getitem__(self,key):check_index(key)try:returnself.changed[key]exceptKeyError: returnself.start+key*self.stepdef__setitem__(self,key,value):check_index(key)self.changed[key]=values=ArithmeticProgression(1,2) foriinrange(5):print(s[i],end=) print(s[10000])程序的执行情况为:1357920001
【例9-2】设计一个简单的字典类92025/9/15classMyDict:def__init__(self,data={}):self.__data=datadef__setitem__(self,key,value):self.__data[key]=valuedef__getitem__(self,key):returnself.__data[key]a=MyDict({red:52,yellow:49})a[green]=103print(a[red])程序的执行情况为:52
9.1.2子类化内置类型 基本的序列与映射协议指定的四个方法可以实现序列和字典的定义,却只是包含了基本的方法。 实现更加全面的序列或映射方法,可直接进行内置类型的子类化。子类化内置类型的方式比完全重新定义一个类方便,不必为每个方法都单独进行设计,只对特定方法进行调整即可。102025/9/15
【例9-3】设计一个具有引用计数的列表112025/9/15classRefList(list):def__init
文档评论(0)