第六章 函数与模块
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
华东师大计算中心
18
函数与模块
编程实例:求1~10的阶乘之和
def fact(n): factorial=1 for counter in range(1,n+1): factorial*=counter return factorial def main(): s=0 for i in range(1,11): s=s+fact(i) print("1!+2!+...+10!=",s) main() 说明:简洁,但系统调用耗时增多。
def 函数名(<参数表>): 函数语句块 <return 返回值>
函数的对外接口:函数名、参数、返回值
华东师大计算中心 9
函数与模块
例如: 定义求两数最大值函数。 def Max(a,b): if a>b: return a else: return b 说明:
参数可以没有(无参函数),也可有多个,多个参数间用逗 号分隔。 在函数定义时的参数又称形参。形参是函数对外的接口。 函数的形参需要在调用该函数时用具体的值(实参)替换。 可通过return语句返回函数的值,也可不用return语句(或在 return后不指定值),这样,函数将返回 “None”──Python中表示值为“空”的关键字。 Python遇见return语句时即退出函数(即使后面还有语句也不 再执行)。
华东师大计算中心 3
函数是一种程序构件, 是构成大程序的小程序
函数与模块
2.为什么要使用函数
一次定义多次使用。 使用函数可以避免重复代码出现,使程序更精炼。 功能切割,模块化,结构化。 使用函数可以使程序的结构清晰,更易于阅读和维护。并可实 现自顶向下、分而治之、逐步求精的结构化程序设计。 作为一种程序构件,完成特殊的功能。 函数也是实现递归等算法必不可少的工具。
华东师大计算中心 26
函数与模块
传值和传地址示例
def swap(x,y): x,y=y,x print('x=',x,'y=',y) a=5 b=9 swap(a,b) print('a=',a,'b=',b) def swap(p): p[0],p[1]=p[1],p[0] print('p0=',p[0],'p1=',p[1]) a=[5,9] swap(a) print('a0=',a[0],'a1=',a[1])
成 绩 管 理 系 统
查询成绩 修改记录 删除记录 成绩统计 退出
华东师大计算中心
5
函数与模块
模块化,自顶向下、逐步细化
结构化程序设计软件的开发方法
采用自顶向下、逐步细化方法,把一个复杂问 题的求解过程分阶段、分层次进行,每个阶段 处理的问题都控制在较易理解和处理的范围内 。 在程序设计中采用模块化结构,将一个复杂的 任务分解为若干相对简单并彼此较独立的模块 ,还可以将这些模块再细分为若干更小的子模 块,以利于“分而治之”、“各个击破”。
华东师大计算中心
17
函数与模块
函数调用时所提供的实际参数个数应与函数定义 时一致。 但Python也允许在定义函数时提供默认值,即在函数定 义时使用:def 函数名(参数1,参数2=值……):…… 这种形 式。这样,在调用函数时如果没有提供相应的参数,则 使用该默认值。 例: def funct(a=3): for n in range(a): for m in range(n+1): print("*",end='') print() funct() funct(5)
华东师大计算中心 22
函数与模块
函数局部变量作用域演示
函数中的变量都是局部的
它们的作用域只是该函数内部, 而且函数执行完毕,变 量所占有的内存空间也被释放 同一个变量名可以出现在不同的函数中,且互不干扰 例: def f1(): x=5 y=6 #f1()中的y和f2()中的y互不相干 print(x+y) def f2(): y=1 print(x+y) #出错!不能引用f1()中的x f1() f2()
华东师大计算中心
4
函数与模块
函数与程序结构
通过函数可使程序实现模块化(modular).
即使增加了代码量! 将主程序中并未重复出现的语句序列改写成了一个函数,原地 方改成一个函数调用. 代码量不减反增,但程序可读性大大增强!
添加成绩 按学号个别查询 按姓名个别查询 按降序整体查询 平均分数 不及格同学 ……
User defined (def)
Python
built-in functions
Library (import)
华东师大计算中心 8 8
函数与模块
6.2
Python语言中的函数
6.2.1 在Python语言中使用函数 1.函数定义
在使用函数之前,先要定义函数,也就是确定 函数的调用形式和函数具体功能的实现。 在Python中,函数定义的格式为:
def main(): print(”Happy print(”Happy print(”Happy print(”Happy def happy(): print(”Happy def singFred(): happy() happy() print(”Happy happy()
birthday to you!”)
华东师大计算中心
19
函数与模块
4. 关于程序的两个顺序
(1)程序的执行顺序 从入口点程序语句开始执行,到执行完毕。 遇到调用函数,执行转向被调用函数,执行完子函数, 返回调用处,继续向下执行。 (2)程序中函数的书写顺序 多个函数在定义的时候,其书写顺序与其被调用执行的 顺序无关。函数的定义没有先后之分,但要注意,函数 是独立的构件,相互之间独立,所以一般不要在一个函 数体内定义另一个函数。
函数正是实现结构化程序设计必不可少的工 具。
华东师大计算中心 6
函数与模块
华东师大计算中心
7
函数与模块
3. 函数的类型
自己编的函数,如常用的main() Python内建函数,如abs() (语言的一部分) Python标准库函数,如math.sqrt()和string.split() 对象的方法, 如win.close()和p.draw()
华东师大计算中心
24
函数与模块
2.函数与调用者之间的数据沟通
变量作用域(scope): 即可以引用该变量的区 域
例:函数f2获知f1中某个变量的途径是:该变 量被作为参数传递给f2,该变量作为返回值传 def f1(): 递。 x=5 def f1(): y=6 x=5 print(x+y) return x y=6 def f2(): f2(x) 函数与调用者之间的数据沟通 : y=1 print(x+y) • 通过参量从调用者输入值 print(f1()+y) f2(z): • def 通过返回值向调用者输出值 f1() y=1 f2() print(z+y) f1()
第6章 函数与模块
1
函数与模块
第6章 函数与模块
6.1 6.2 6.3 6.4
函数的基本概念 Python语言中的函数 函数应用 模块和Python标准库
2
函数与模块
6.1
函数的基本概念
1.什么是函数?
基本思想
给出语句序列,并给这个序列一个名字 用来组织语句,便于掌控程序的开发 功能切割,模块化,结构化 一次定义多次使用 先定义后调用 通过函数名调用之 调用时可传递参量 调用执行的是函数体(语句序列) 调用产生返回值
华东师大计算中心
11
函数与模块
函数调用的过程
当函数调用发生时----- 调用程序暂停 函数形参被赋值为实参(按位置对应) 执行函数体 控制返回调用点的下一条语句
例6-2-2、例6-2-3 演示
华东师大计算中心
12
函数与模块
函数编程补充实例:生日歌
用函数减少重复代码
birthday to you!”) birthday to you!”) birthday, dear Fred.”) birthday to you!”)
华东师大计算中心
20
函数与模块
函数在定义时的书写顺序与调用无关
def f2(z): y=1 print(z+y) def f1(): x=5 y=6 f2(x) print(x+y) f1()
def f1(): x=5 y=6 f2(x) print(x+y) def f2(z): y=1 print(z+y) f1()
一程序:输入西瓜总数(小于2000个),输出所需卖的天 数。
华东师大计算中心
16
函数与模块
例6-2-5程序
def f5(d): day=0 x1=int(d) while x1>1: x2=x1-(int(x1/2)+2) x1=x2 day+=1 return day x=input("Enter total number:") while int(x) in (range(2000)): print("days:",f5(x)) #call f5() x=input("Enter total number:")
华东师大计算中心 25
函数与模块
3. 传值和传地址
调用函数时所提供的实际参数如果是一般 变量,仅是单向向函数中提供值,在函数 中进行的修改不会影响函数外的该变量值 。 但列表除外。如果将列表对象作为函数的 参数,则向函数中传递的是列表的引用地 址,这时在函数中对它的操作将直接改变 函数外该列表的值(列表中的部分元素作 为函数参数与一般变量相同)。
华东师大计算中心
23
函数与模块
全局变量与局部变量的说明
x = 'outside' y = 'global' def f(): x = 'inside' print(x) print(y) f() Print(x)
• 在一个函数中使用的变量 称为局部变量,不允许在函数 外或另一函数中使用。 • 在函数外定义的变量是全 局变量,允许在函数中使用。 • 如果在函数中定义的局部 变量与全局变量同名,则局部 变量屏蔽全局变量
华东师大计算中心 21
函数与模块
6.2.2
函数间的数据联系
1. 局部变量和全局变量 在一个函数中使用的变量称为局部变量,不允 许在函数外或另一函数中使用。 在所有函数外定义的变量为全局变量,可以在 各函数中使用。 程序中过多使用全局变量,将使函数间的耦合 变得紧密,破坏函数的独立性。 局部变量的作用域只是该函数内部, 所以不同 的函数中可以有相同名称的变量,它们在各自 的函数中互不干扰。当函数执行完毕,局部变 量所占有的内存空间也被释放。
华东师大计算中心 10
函数与模块
2. 在Python中调用函数
通过“函数名(参数表)”形式调用
◦ 如果函数定义时有参数,必须在调用时提供实际参数。实际 参数个数、位置要与函数定义时相对应。 ◦ 如果函数定义时没有参数,调用时也必须使用空括号。
函数调用的形式
◦ 直接以语句形式出现(此时不关心函数的返回值) 例如:happy() ◦ 在表达式中出现(此时一般需要函数有返回值) 例如:m=Max(35,x) print(”Max=” ,Max(x,y)) ◦ 作为另一个函数调用的实际参数出现 例如:max=Max(Max(x,y),z)
重复代码的坏处: 1.费时费力 2.代码维护的一 致性(例如:单 词拼写错误)
birthday, dear Fred.”)
华东师大计算中心
13
函数与模块
编程实例:生日歌(续)
def happy(): print(”Happy birthday to you!”) def sing(person): happy() happy() print(”Happy birthday, dear”, person + “.”) happy() def main(): sing(”Fred”) sing(”Lucy”) sing(”Elmer”)
用参量增强函数的通用性(代码可重用)
华东师大计算中心
14
函数与模块
函数调用过程图解
华东师大计算Βιβλιοθήκη Baidu心
15
函数与模块
3. 函数定义与函数调用中参数间的关系
函数定义时的参数称为形式参数(简称形参),函数调 用时的参数称为实际参数(简称实参)。函数调用时所 提供的实参个数应与函数定义时的形参一致。
例6-2-5 老王卖西瓜,每天只卖总数的一半多两个。编