



下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
《Python小屋》之三程序控制结构与函数设计3.3函数设计与使用大家在初中数学课程中就有学习过函数的概念,函数表示从自变量到因变量之间的一-种映射或对应关系。软件开发中的函数也具有相似的含义,也是把输入经过一定的变换和处理最后得到预订的输出。从外部看,函数就像一个黑盒子,不需要了解内部原理,值需要了解其接口或使用方法即可。在软件开发过程中,经常有很多操作是完全相同或者是非常相似的,仅仅是要处理的数据不同而已,因此经常在不同的代码位置多次执行相似或完全相同的代码块。很显然,从软件设计和代码复用的角度来讲,直接将该代码块复制到多个相应位置然后进行简单修改绝对不是一个好主意。虽然这样可以使得多份复制的买吗可以彼此独立的进行修改,单这样不仅增加了代码最,也增加了代码阅读、理解和维护的难度,更重要的是为代码测试和纠错带来了很大的困难。一旦被复制的代码块将来某天被发现存在问题而需要修改,则必须对所有的复制都做同样正确的修改,这在实际中是很难完成的意向任务。由于代码量的大幅度增加,导致代码之间的关系更加复杂,很可能在修补就漏洞的同事又引入了新漏洞。因此,应尽量减少使用直接复制代码块的方式来实现复用。解决这个问题的邮箱方法是设计函数(function)和类(class)。将可能反复执行的代码封装为函数,并在需要执行该段代码功能的地方进行调用,这不仅可以实现代码的复用,更重要的是可以保证代码的一致性,只需要修改该函数代码则所有调用位置均得到体现。同事,把大任务拆分成多个函数也是分治法的经典应用,复杂问题简单化,使得软件开发像搭积木一样简单。淡然,在实际开发中,需要对函数进行良好的设计和优化才能充分发挥其优势。在编写函数时,有很多原则需要参考和遵守,例如,不要在用以函数中执行太多的功能,尽量只让其完成一个高度相关且大小合适的功能,以提高模块的内聚行。另外,尽量减少不同函数之间的隐式耦合,例如减少全局变量的使用,是的函数之间仅通过调用和参数传递来显式体现其相互关系。基本语法在Python中,定义函数的语法如下:ldef函数名([参数列表]):“‘注释"'函数体代码块在Python中使用def关键字来定义函数,然后是一个空格和函数名称,接下来是一对圆括号,在圆括号内是形式参数列表,如果有多个参数则使用逗号分隔开,圆括号之后是一个冒号和换行,最后是必要的注释和函数体代码。定义函数时需要注意的问题:(1)函数参数不需要声明其类型,也不需要指定函数返回值类型;(2)即使该函数不需要接受任何参数,也必须保留一对空的圆括号;(3)括号后面的冒号必不可少;(4)函数体相对于def关键字必须保持一定的空格缩进。小提示:注释是软件开发人员的笔记,对代码测试人员和维护人员来说也非常重要。在Python中有两种注释方式:符号#后面的内容表示注秤,不属于任何语句的一对三引号也表示注释。小技巧:不少程序员是编写完代码之后再添加适当的注释,我恰恰相反。我一般都是先写注释,以注释的形式用自然语言把程序思路描述出来,然后再把这些注释“翻译”成程序语言,正所谓“代码未动,注释先行二下面的函数用来计算斐波那契数列中小于参数n的所有值:Ideffib(n):~#定义函数,括号里的n是形式参数a,b=l,lwhilea<n:ifb<n:a,b=b,a+belse:print(a)breaklOfib(lOOO)#调用函数,括号里的1000是实参1112#函数执行结果:987代码块在定义函数时,开头部分的注释不是必须的,但是如果为函数的定义加上一段注释的话,可以为用户提供友好的提示和使用帮助。例如,把上面生成斐波那契的函数定义加上如下注释:"'acceptanintegern.returnthenumberslessthanninFibonaccisequence.'"如此一来,可以使用内置函数help。来查看函数的使用帮助,并且在调用该函数时输入左侧圆括号之后,立刻就会得到该函数的使用说明。print(fib._doc_)print('-,*30)help(fib)acceptanintegern.returnthenumberslessthanninFibonaccisequence.Helponfunctionfibinmodule_main_:llfib(n)acceptanintegern.returnthenumberslessthanninFibonaccisequence.代码块建议:如果代码本身不能提供非常好的可读性,那么最好加上适当的注释来说明,要不然,自己写的代码自己都看不懂了。很多程序员都有过这样的经历。在Python中,定义函数时不需要声明函数返回值的类型,而是使用return语句结束函数的执行的同时返回任意类型的值,函数返回值类型与return语句返回表达式的类型一致。无论return语句出现在函数的任何位置,一旦得到执行将直接结束函数的执行。如果函数没有return语句或者执行了不返回任何值的return语句,Python将认为该函数以returnNone结束,即返回空值。小提示:作为使用者,在调用函数时,一定要注意函数有没有返回值,以及是否会对函数实参的值进行修改。例如,前面介绍的列表方法sort()属于原地操作,没有返回值,而内置函数sorted。则返回排序后的序列,并不对原列表做任何修改。1»>a=[1Z2,3A9,5,7]»>print(sorted(a))[1,2,3,4,5,7,9]»>»>a[1,2,3,4,9,5,7]#原列表内容没变7»>»>print(a.sort())#列表对象的sort()方法没有返回值None»>»>print(a)口,2,3,4,5,7,9]»>代码块扩展知识:函数属于可调用对象。由于构造函数的存在,类也是可调用的。另外,任何包含call()方法的类的对象都是可调用的。例如,下面的代码演示了函数嵌套定义情况:deflinear(a,b):defresult(x):ttfF.Python41,函数是可以使用嵌套定义的returna*x+breturnresult6#下面的代码演示了可调用对象类的定义:classlinear:def_init_(self,a,b):self.a=aself.b=bdef_call_(self,x):14returnself.a*x+self.b1516#使用上面的嵌套函数和类这两种方式中任何一个,都可以通过以下的方式来定义一个可调用对象:1718taxes=linear(0.3,2)1920#然后通过下面的方式来调用该对象:2122taxes(5)2324#下面的代码完整地演示了嵌套函数定义与使用的方法,有效利用了用户名检查功能的代码,关于面向对象编程的知识请参考第4章。2526defcheck_permission(func):27defwrapper(*args,**kwargs):28ifkwargs.getCusername')!='admin':29raiseException('Sorry.Youarenotallowed.')30returnfunc(*args,**kwargs)31returnwrapper3233classReadWriteFile():3435@check_permission36defread(self,username,filename):37returnopen(filename,'r').read()3839defwrite(self,username,filename,content):40open(filename/a+').write(content)4142#把函数check_permission作为普通函数使用43write=check_permission(write)4445if_name_=='_main_46t=ReadWriteFilef)47print('Originally')48print(t.read(username=,admin'zfilename=r'd:\sample.txt,))49print('Now,trytowritetoafile...,)50t.write(username='admin,/filename=r,d:\sample.txt,,content=,\nhelloworld')
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医护理学(第5版)课件 第十章 其他常用中医护理技术
- 三农产品包装与运输管理手册
- 物理力学概念引入与实践活动设计
- 政府部门信息化建设和数据治理方案
- 销售员工心态培训课程
- 可行性研究报告封面格式
- 建筑智能化系统设计技术规范
- 零售业O2O营销模式创新与实施策略
- 绿色建筑材料应用技术规范书
- 机器人技术及其在物流行业的应用手册
- 2025年日历表(A4版含农历可编辑)
- 尺骨冠突骨折课件
- 北师大版七年级下册第一章整式的乘除计算题专项训练
- 2022年苏州健雄职业技术学院单招考试面试试题及答案解析
- 植物生理教案
- 乳腺癌改良根治术
- 新版(七步法案例)PFMEA
- 临床护理重点专科建设项目评审标准
- 二倍角的三角函数说课稿
- 《颈椎病的护理》PPT课件(完整版)
- 新苏教版科学五年级下册全套教学课件
评论
0/150
提交评论