38569-00陆朝俊-pythonCh4_第1页
38569-00陆朝俊-pythonCh4_第2页
38569-00陆朝俊-pythonCh4_第3页
38569-00陆朝俊-pythonCh4_第4页
38569-00陆朝俊-pythonCh4_第5页
已阅读5页,还剩41页未读 继续免费阅读

下载本文档

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

文档简介

模块化编程,模块化设计和建造,在对产品进行功能分析的基础上,将产品分解成若干个功能模块,预制好的模块再进行组装,形成最终产品.模块:提供特定功能的相对独立的单元.标准化:标准尺寸和标准接口可组装:多个模块可以方便灵活地组合可替换:改变系统的局部功能可维护:对模块进行局部修改或设置,LuChaojun,SJTU,2,模块化编程,将程序分解为独立的、可替换的、具有预定功能的模块,每个模块实现一个功能.各模块组合在一起形成最终程序.好处:易设计:复杂问题化成简单问题易实现:可以团队开发易测试:可各自测试易维护:增加模块可重用:一个模块可参与组合不同程序,LuChaojun,SJTU,3,分离关注点,关注点:是指设计者关心的某个系统特性或行为分离关注点(SoC):将系统分解为互不重叠的若干部分,每个部分对应于一个关注点.在模块化编程中,以程序的各个功能作为关注点,模块划分就是分离关注点的结果.,LuChaojun,SJTU,4,编程语言中的模块化构造,汇编语言:子例程,宏高级语言:函数,过程有的语言不加区分,统称为函数.包,模块,函数库,类库,LuChaojun,SJTU,5,Python函数,函数是一种程序构件,是构成大程序的小功能部件function一词本身就有功能的含义我们已经熟悉的函数:Python内建函数,如abs()Python库函数,如math.sqrt()模块化的程序是由许多函数组合而成的.,LuChaojun,SJTU,6,为什么需要函数?,编程更容易把握大程序分解成小功能部件代码重用,避免重复相同/相似代码提高开发效率更易维护程序更可读,更易理解代码简洁美观,LuChaojun,SJTU,7,函数用途:减少重复代码,编程实例:画一棵树print*print*print*print*print*print*print*print*print#print#print#,deftreetop():print*print*print*print*deftree():treetop()treetop()print#print#print#tree(),重复代码的弊端,程序不必要地冗长代码一致性维护麻烦:若修改一处代码,则所有重复的地方都要一致地修改程序看上去累赘不美观输入大量重复代码很单调乏味,函数用途:改善程序结构(1),模块化:将程序分解成多个较小的相对独立的函数,可使程序结构清晰,容易理解.,deftreetop():print*print*print*print*deftree():treetop()treetop()print#print#print#tree(),deftreetop():print*print*print*print*deftreetrunk():print#print#print#defmain():treetop()treetop()treetrunk()main(),函数用途:改善程序结构(2),deftreetop():print*print*print*print*deftreetrunk():print#print#print#defmain():treetop()treetop()treetrunk()main(),deftreetop1():print*print*print*print*deftreetop():treetop1()treetop1()deftreetrunk():print#print#print#defmain():treetop()treetrunk()main(),主程序结构清晰,函数用途:提高程序通用性,换用字符来画树,以便比较美观度.,deftreetop1():print*print*print*print*deftreetop2():printprintprintprintdefstar_treetop():treetop1()treetop1()defcaret_treetop():treetop2()treetop2().,deftreetop(ch):print%s%(ch)print%s%(3*ch)print%s%(5*ch)print%s%(7*ch)defstar_treetop():treetop(*)treetop(*)defcaret_treetop():treetop()treetop().,利用函数参数提高通用性,小结:函数的定义和调用,先定义(define)再通过函数名调用调用时传递参数调用执行的是函数体(语句序列)调用产生返回值函数定义可置于程序中任何地方,但必须在调用之前,LuChaojun,SJTU,13,deffunc(x):y=x*xreturnya=func(2),函数调用过程,函数定义def():函数调用()调用者暂停函数形参被赋值为实参执行函数体控制返回调用者(调用点的下一条语句),函数调用过程图解(1),函数调用过程图解(2),函数调用过程图解(3),参数传递,对于函数定义deff(x,y,z):.按位置传递f(1,2,3)按名传递:形参=实参f(x=1,z=3,y=2)实参可以是字面值,也可以是已赋值的变量f(1,a,b),变量的作用域,变量具有作用域(scope):即可以引用该变量的程序区域.不同作用域中的变量,即使同名,也是不同的变量!作用域可以是局部,也可以是全局函数中定义的变量是局部的:即作用域是函数体.函数的形参可视为局部变量,只不过是在调用时才赋值.x,y=0,0deff(x):y=1printx,yf(x)printx,y,函数如何使用外部数据,Python中,函数体可直接引用外部的变量.x=0deff(y):z=1printx,y,zf(10)但这用法很不好!不符合模块化要求.应当通过参数向函数传递数据x=0deff(p,y):z=1printp,y,zf(x,10),f()xy,z,x,全局变量,函数若需引用并修改外部变量,可声明全局变量x=1deff():printx#未定义变量视为全局变量x=2#赋值引入局部变量,则前行出错!f()defh():globalxprintxx=2#此赋值是针对全局变量的printxh(),f()x,h()x,x,全局变量的用途,多个函数处理共享数据deff():globalxx=x+1printxdefg():globalxx=x1printxx=0f()g(),函数的返回值,函数与调用者之间的信息交互:通过形参从调用者输入值通过返回值向调用者输出值定义def():returnreturn计算各表达式,将结果返回调用者,退出函数,函数返回值的使用,如果没有或者用不上函数返回值,则函数调用可以直接当成一条语句f(3)相当于某些语言中的过程调用如果想使用函数返回值,则有两种用法用变量接收返回值,如x=f(3)print2+x*4直接用在表达式中,如print2+f(3)*4忘记接收函数返回值是Python初学者的常见错误,函数返回值使用例(1),defsq(x):returnx*xsq(2)4printsq(3)+110a=4b=sq(a)printb16,函数返回值使用例(2),求两点距离的函数frommathimportsqrtdefsq(x):returnx*xdefdist(u,v):d=sqrt(sq(v0-u0)+sq(v1-u1)returnd用一个函数辅助定义另一个函数,这是化繁为简的常用做法.,函数返回值使用例(3),多个返回值的接收defheadtail(list):returnlist0,listlen(list)-1用多个变量h,t=headtail(1,2,3,4,5)printh,t15用一个变量,接受的值是元组.v=headtail(1,2,3,4,5)v(1,5),关于return,return通常出现在函数末尾,因为函数一般都是执行完所有步骤之后才能得出计算结果并返回.有时在函数到达末尾之前就终止执行并返回.deff(x):ifxfrommoduletestimportdaysdays

温馨提示

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

评论

0/150

提交评论