




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、模块化编程模块化编程 模块化设计和建造模块化设计和建造 在对产品进行功能分析的基础上在对产品进行功能分析的基础上,将产品将产品 分解成若干个功能模块分解成若干个功能模块,预制好的模块再预制好的模块再 进行组装进行组装,形成最终产品形成最终产品. 模块模块:提供特定功能的相对独立的单元提供特定功能的相对独立的单元. 标准化标准化:标准尺寸和标准接口标准尺寸和标准接口 可组装可组装:多个模块可以方便灵活地组合多个模块可以方便灵活地组合 可替换可替换:改变系统的局部功能改变系统的局部功能 可维护可维护:对模块进行局部修改或设置对模块进行局部修改或设置 Lu Chaojun, SJTU 2 模块化编程
2、模块化编程 将程序分解为独立的、可替换的、具有将程序分解为独立的、可替换的、具有 预定功能的模块预定功能的模块,每个模块实现一个功能每个模块实现一个功能. 各模块组合在一起形成最终程序各模块组合在一起形成最终程序. 好处好处: 易设计易设计:复杂问题化成简单问题复杂问题化成简单问题 易实现易实现:可以团队开发可以团队开发 易测试易测试:可各自测试可各自测试 易维护易维护:增加模块增加模块 可重用可重用:一个模块可参与组合不同程序一个模块可参与组合不同程序 Lu Chaojun, SJTU 3 分离关注点分离关注点 关注点关注点:是指设计者关心的某个系统特性是指设计者关心的某个系统特性 或行为或
3、行为 分离关注点分离关注点(SoC):将系统分解为互不重将系统分解为互不重 叠的若干部分叠的若干部分,每个部分对应于一个关注每个部分对应于一个关注 点点. 在模块化编程中在模块化编程中,以程序的各个功能作为以程序的各个功能作为 关注点关注点,模块划分就是分离关注点的结果模块划分就是分离关注点的结果. Lu Chaojun, SJTU 4 编程语言中的模块化构造编程语言中的模块化构造 汇编语言汇编语言:子例程子例程,宏宏 高级语言高级语言:函数函数,过程过程 有的语言不加区分有的语言不加区分,统称为函数统称为函数. 包包,模块模块,函数库函数库,类库类库 Lu Chaojun, SJTU 5 P
4、ython函数函数 函数是一种程序构件函数是一种程序构件,是构成大程序的小是构成大程序的小 功能部件功能部件 function一词本身就有一词本身就有功能功能的含义的含义 我们已经熟悉的函数我们已经熟悉的函数: Python内建函数内建函数,如如abs() Python库函数库函数,如如math.sqrt() 模块化的程序是由许多函数组合而成的模块化的程序是由许多函数组合而成的. Lu Chaojun, SJTU 6 为什么需要函数为什么需要函数? 编程更容易把握编程更容易把握 大程序分解成小功能部件大程序分解成小功能部件 代码重用代码重用,避免重复相同避免重复相同/相似代码相似代码 提高开发
5、效率提高开发效率 更易维护更易维护 程序更可读程序更可读,更易理解更易理解 代码简洁美观代码简洁美观 Lu Chaojun, SJTU 7 函数用途函数用途:减少重复代码减少重复代码 编程实例编程实例:画一棵树画一棵树 print * print * print * print * print * print * print * print * print # print # print # def treetop(): print * print * print * print * def tree(): treetop() treetop() print # print # print #
6、 tree() 重复代码的弊端重复代码的弊端 程序不必要地冗长程序不必要地冗长 代码一致性维护麻烦代码一致性维护麻烦:若修改一处代码若修改一处代码,则则 所有重复的地方都要一致地修改所有重复的地方都要一致地修改 程序看上去累赘不美观程序看上去累赘不美观 输入大量重复代码很单调乏味输入大量重复代码很单调乏味 函数用途函数用途:改善程序结构改善程序结构(1) 模块化模块化:将程序分解成多个较小的相对独将程序分解成多个较小的相对独 立的函数立的函数,可使程序结构清晰可使程序结构清晰,容易理解容易理解. def treetop(): print * print * print * print * de
7、f tree(): treetop() treetop() print # print # print # tree() def treetop(): print * print * print * print * def treetrunk(): print # print # print # def main(): treetop() treetop() treetrunk() main() 函数用途函数用途:改善程序结构改善程序结构(2) def treetop(): print * print * print * print * def treetrunk(): print # pri
8、nt # print # def main(): treetop() treetop() treetrunk() main() def treetop1(): print * print * print * print * def treetop(): treetop1() treetop1() def treetrunk(): print # print # print # def main(): treetop() treetrunk() main() 主程序结构清晰主程序结构清晰 函数用途函数用途:提高程序通用性提高程序通用性 换用换用字符来画树字符来画树,以便比较美观度以便比较美观度.
9、 def treetop1(): print * print * print * print * def treetop2(): print print print print def star_treetop(): treetop1() treetop1() def caret_treetop(): treetop2() treetop2() . def treetop(ch): print %s % (ch) print %s % (3*ch) print %s % (5*ch) print %s % (7*ch) def star_treetop(): treetop(*) treeto
10、p(*) def caret_treetop(): treetop() treetop() . 利用函数参数利用函数参数 提高通用性提高通用性 小结小结:函数的定义和调用函数的定义和调用 先定义先定义(define) 再通过函数名调用再通过函数名调用 调用时传递参数调用时传递参数 调用执行的是函数体调用执行的是函数体(语句序列语句序列) 调用产生返回值调用产生返回值 函数定义可置于程序中任何地方函数定义可置于程序中任何地方,但必须但必须 在调用之前在调用之前 Lu Chaojun, SJTU 13 def func(x): y = x * x return y a = func(2) 函数调用
11、过程函数调用过程 函数定义函数定义 def (): 函数调用函数调用 () 调用者暂停调用者暂停 函数形参被赋值为实参函数形参被赋值为实参 执行函数体执行函数体 控制返回调用者控制返回调用者(调用点的下一条语句调用点的下一条语句) 函数调用过程图解函数调用过程图解(1) 函数调用过程图解函数调用过程图解(2) 函数调用过程图解函数调用过程图解(3) 参数传递参数传递 对于函数定义对于函数定义 def f(x,y,z): . 按位置传递按位置传递 f(1,2,3) 按名传递按名传递:形参形参=实参实参 f(x=1,z=3,y=2) 实参可以是字面值实参可以是字面值,也可以是已赋值的变也可以是已赋
12、值的变 量量 f(1,a,b) 变量的作用域变量的作用域 变量具有变量具有作用域作用域(scope):即可以引用该变量的程序区域即可以引用该变量的程序区域. 不同作用域中的变量不同作用域中的变量,即使同名即使同名,也是不同的变量也是不同的变量! 作用域可以是局部作用域可以是局部,也可以是全局也可以是全局 函数中定义的变量是函数中定义的变量是局部的局部的:即作用域是函数体即作用域是函数体. 函数的形参可视为局部变量函数的形参可视为局部变量,只不过是在调用时才赋值只不过是在调用时才赋值. x,y = 0,0 def f(x): y = 1 print x,y f(x) print x,y 函数如何
13、使用外部数据函数如何使用外部数据 Python中中,函数体可直接引用外部的变量函数体可直接引用外部的变量. x = 0 def f(y): z = 1 print x,y,z f(10) 但这用法很不好但这用法很不好!不符合模块化要求不符合模块化要求. 应当通过参数向函数传递数据应当通过参数向函数传递数据 x = 0 def f(p,y): z = 1 print p,y,z f(x,10) f() x y,z x 全局变量全局变量 函数若需引用并修改外部变量函数若需引用并修改外部变量,可声明可声明全局变量全局变量 x = 1 def f(): print x #未定义变量视为全局变量未定义变
14、量视为全局变量 x = 2 #赋值引入局部变量赋值引入局部变量,则前行出错则前行出错! f() def h(): global x print x x = 2 #此赋值是针对全局变量的此赋值是针对全局变量的 print x h() f() x h() x x 全局变量的用途全局变量的用途 多个函数处理共享数据多个函数处理共享数据 def f(): global x x = x + 1 print x def g(): global x x = x 1 print x x = 0 f() g() 函数的返回值函数的返回值 函数与调用者之间的信息交互函数与调用者之间的信息交互: 通过形参从调用者输
15、入值通过形参从调用者输入值 通过通过返回值返回值向调用者输出值向调用者输出值 定义定义 def (): return return计算各表达式计算各表达式,将结果返回调用者将结果返回调用者,退退 出函数出函数 函数返回值的使用函数返回值的使用 如果没有或者用不上函数返回值如果没有或者用不上函数返回值,则函数调用可则函数调用可 以直接当成一条语句以直接当成一条语句 f(3) 相当于某些语言中的相当于某些语言中的过程调用过程调用 如果想使用函数返回值如果想使用函数返回值,则有两种用法则有两种用法 用变量接收返回值用变量接收返回值,如如 x = f(3) print 2 + x * 4 直接用在表达
16、式中直接用在表达式中,如如 print 2 + f(3) * 4 忘记接收函数返回值是忘记接收函数返回值是Python初学者的常见错初学者的常见错 误误 函数返回值使用例函数返回值使用例(1) def sq(x): return x * x sq(2) 4 print sq(3) + 1 10 a = 4 b = sq(a) print b 16 函数返回值使用例函数返回值使用例(2) 求两点距离的函数求两点距离的函数 from math import sqrt def sq(x): return x * x def dist(u,v): d = sqrt(sq(v0-u0)+sq(v1-u1
17、) return d 用一个函数辅助定义另一个函数用一个函数辅助定义另一个函数,这是化繁为这是化繁为 简的常用做法简的常用做法. 函数返回值使用例函数返回值使用例(3) 多个返回值的接收多个返回值的接收 def headtail(list): return list0,listlen(list)-1 用多个变量用多个变量 h,t = headtail(1,2,3,4,5) print h,t 1 5 用一个变量用一个变量,接受的值是元组接受的值是元组. v = headtail(1,2,3,4,5) v (1, 5) 关于关于return return通常出现在函数末尾通常出现在函数末尾,因为函数一般都是因为函数一般都是 执行完所有步骤之后才能得出计算结果并返回执行完所有步骤之后才能得出计算结果并返回. 有时在函数到达末尾之前就终止执行并返回有时在函数到达末尾之前就终止执行并返回. def f(x): if x from moduletest import days days(1900
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 垃圾点整治合同范本
- 树木修理合同范本
- 铺砖工人合同范本
- 木工吊顶售后合同范本
- 科技展品制作的美学与功能优化教程
- 二零二五年度物理实验室量子技术合作研究协议
- 2025年度生猪养殖与农业观光旅游合作框架协议
- 二零二五年度抚养权变更及子女教育、医疗全面支持合同
- 二零二五年度儿童玩具品牌商标授权合同
- 2025年度智慧社区建设合作投资协议书
- 自来水厂安全施工组织设计
- 川教版2024-2025学年六年级下册信息技术全册教案
- KTV商务礼仪培训
- 三级安全教育试题(公司级、部门级、班组级)
- 2024年《论教育》全文课件
- 计算机网络与信息安全(2024年版)课件 李全龙 第1-4章计算机网络与信息安全概述-网络层服务与协议
- 人工智能教育背景下中小学教师智能教育素养提升路径研究
- 必考古诗赏析知识点(九年级下册)-2025年中考语文一轮复习
- 辽宁省沈阳市大东区2024年中考化学模拟试题一
- 国能辽宁北票 200MW 风力发电项目地质灾害危险性评估报告
- 江苏省常州市教育学会2023-2024学年下学期八年级数学考试卷
评论
0/150
提交评论