Python编程基础(第3版)(微课版)课件 6.4 迭代对象_第1页
Python编程基础(第3版)(微课版)课件 6.4 迭代对象_第2页
Python编程基础(第3版)(微课版)课件 6.4 迭代对象_第3页
Python编程基础(第3版)(微课版)课件 6.4 迭代对象_第4页
Python编程基础(第3版)(微课版)课件 6.4 迭代对象_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

迭代对象1返回迭代器目录生成迭代器2【任务6-3】迭代Car类3迭代是Python最强大的功能之一,是访问集合元素的一种方式。之前介绍的Python容器对象都可以用for循环进行遍历,代码如下。生成迭代器>>>forelementin[1,2,3]:...print(element)123>>>forelementin(1,2,3):...print(element)123>>>forkeyin{'one':1,'two':2}:...print(key)onetwo>>>forcharin'123':...print(char)123>>>forlineinopen('../data/myfile.txt'):...print(line)123迭代器(iterator)有两个基本的函数:iter函数和next函数。如果for循环在容器对象上调用iter函数,那么该函数会返回一个定义next函数的迭代对象,iter函数会在容器对象中逐一访问元素。当容器对象遍历完毕,next函数找不到后续元素时,将会引发一个StopIteration异常,终止for循环,代码如下。生成迭代器>>>L=[1,2,3]>>>it=iter(L)>>>print(it)<list_iteratorat0xa9e0630>>>>print(next(it))1>>>print(next(it))2>>>print(next(it))3>>>print(next(it))StopIteration迭代器是一个可以记录遍历位置的对象,从第1个元素被访问开始,直到所有元素被访问完结束。迭代器只能往前,不能退后。要将迭代器加入类中,需要定义一个__iter__()方法,它返回一个有next函数的对象。如果类定义了next函数,那么__iter__()方法可以只返回self参数。代码示例如下。生成迭代器生成迭代器>>>classCat:...def__init__(self,name,age):...=name...self.age=age...=[,self.age]...self.index=-1...defgetName(self):...return...defgetAge(self):...returnself.age...def__iter__(self):...print('名字

年龄')...returnself...defnext(self):...ifself.index==len()-1:...raiseStopIteration...self.index+=1...return[self.index]>>>newcat=Cat('Coffe',3)#创建对象>>>print(newcat.getName())#访问对象的属性Coffe>>>iterator=iter(newcat.next,1)#调用迭代函数输出对象的属性>>>forinfoiniterator:...print(info)Coffe31返回迭代器目录生成迭代器2【任务6-3】迭代Car类3生成器是一个返回迭代器的函数,它可以通过常规的def关键字来定义,但是不用return语句返回,而是用yield语句一次返回一个结果。一般的函数在生成值后会退出,但生成器在生成值后会自动挂起,暂停执行状态并保存状态信息。当函数恢复时,这些状态信息将再度生效,通过在每个结果之间挂起和继续它们的状态自动实现迭代器协议。通过生成斐波那契数列来对比有yield语句和没有yield语句的情况,进一步了解生成器,代码如下。1.yield语句1.yield语句>>>deffibonacci(n):#生成器——斐波那契数列...a,b,counter=0,1,0...whileTrue:...ifcounter>n:...return...yielda...a,b=b,a+b...print('%d,%d'%(a,b))...counter+=1>>>f=fibonacci(10)#f是一个迭代器,由生成器返回生成>>>whileTrue:...try:...print(next(f),end='')...except:...break01,111,212,323,535,858,13813,211321,342134,553455,895589,1441.yield语句>>>deffibonacci(n):...a,b,counter=0,1,0...whileTrue:...if(counter>n):...return...#yielda#不执行yield语句...a,b=b,a+b...print('%d,%d'%(a,b))...counter+=1>>>f=fibonacci(10)1,11,22,33,55,88,1313,2121,3434,5555,8989,144列表解析的一般形式如下。2.生成器表达式[exprforiter_variniterableifcond_expr]1,2当迭代iterable里的所有内容时,每一次迭代后,先将iterable里满足cond_expr条件的内容放到iter_var中,再在表达式expr中应用iter_var的内容,最后用表达式的计算值生成一个列表。例如,生成一个列表以保存50以内的所有奇数。[iforiinrange(50)ifi%2]当序列过长,而每次只需要获取一个元素时,应当考虑使用生成器表达式生成器表达式是被圆括号括起来的,列表解析式是被方括号括起来的;生成器表达式返回的是一个生成器对象,而列表解析返回的是一个新列表。生成器表达式的一般形式如下。2.生成器表达式(exprforiter_variniterableifcond_expr)使用生成器表达式求出1~10内3或5的倍数,代码如下。2.生成器表达式>>>g=(iforiinrange(1,10)ifi%3==0ori%5==0)>>>foriing:...print(i)35691返回迭代器目录生成迭代器2【任务6-3】迭代Car类3【任务6-3】迭代Car类任务分析任务描述对Car类进行迭代,增加品牌(brand)和废气涡轮增压(T)两个属性,并输出所有属性。(1)在原有Car类上增加品牌(brand)和废气涡轮增压(T)两个属性。(2)使用方括号创建列表[brand,wheelnum,color,T],并赋值给变量(info)。(3)为迭代设置初始变量(index)。(4)使用def关键字分别定义getBrand、getNewheelnum、getNewcolor、getT函数,用return语句返回对应的属性值。(5

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论