版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1第6章
函数与模块第6章
函数与模块6.1函数的基本概念6.2Python语言中的函数6.3函数应用6.4模块和Python标准库26.1函数的基本概念1.什么是函数?基本思想给出语句序列,并给这个序列一个名字用来组织语句,便于掌控程序的开发功能切割,模块化,结构化一次定义多次使用函数是一种程序构件,是构成大程序的小程序先定义后调用通过函数名调用之调用时可传递参量调用执行的是函数体(语句序列)调用产生返回值华东师大计算中心342.为什么要使用函数一次定义多次使用。使用函数可以避免重复代码出现,使程序更精炼。功能切割,模块化,结构化。使用函数可以使程序的结构清晰,更易于阅读和维护。并可实现自顶向下、分而治之、逐步求精的结构化程序设计。作为一种程序构件,完成特殊的功能。函数也是实现递归等算法必不可少的工具。华东师大计算中心函数与程序结构通过函数可使程序实现模块化(modular).即使增加了代码量!将主程序中并未重复出现的语句序列改写成了一个函数,原地方改成一个函数调用.代码量不减反增,但程序可读性大大增强!华东师大计算中心5成绩管理系统添加成绩查询成绩按学号个别查询按姓名个别查询按降序整体查询修改记录删除记录成绩统计平均分数不及格同学……退出模块化,自顶向下、逐步细化结构化程序设计软件的开发方法采用自顶向下、逐步细化方法,把一个复杂问题的求解过程分阶段、分层次进行,每个阶段处理的问题都控制在较易理解和处理的范围内。在程序设计中采用模块化结构,将一个复杂的任务分解为若干相对简单并彼此较独立的模块,还可以将这些模块再细分为若干更小的子模块,以利于“分而治之”、“各个击破”。函数正是实现结构化程序设计必不可少的工具。华东师大计算中心6华东师大计算中心73.函数的类型自己编的函数,如常用的main()Python内建函数,如abs()(语言的一部分)Python标准库函数,如math.sqrt()和string.split()对象的方法,如win.close()和p.draw()8Pythonbuilt-in
functionsLibrary(import)Userdefined(def)华东师大计算中心86.2Python语言中的函数6.2.1在Python语言中使用函数1.函数定义在使用函数之前,先要定义函数,也就是确定函数的调用形式和函数具体功能的实现。在Python中,函数定义的格式为:def函数名(<参数表>):
函数语句块 <return返回值>函数的对外接口:函数名、参数、返回值华东师大计算中心910例如:
定义求两数最大值函数。
defMax(a,b):ifa>b:returnaelse:returnb说明:参数可以没有(无参函数),也可有多个,多个参数间用逗号分隔。在函数定义时的参数又称形参。形参是函数对外的接口。函数的形参需要在调用该函数时用具体的值(实参)替换。可通过return语句返回函数的值,也可不用return语句(或在return后不指定值),这样,函数将返回“None”──Python中表示值为“空”的关键字。Python遇见return语句时即退出函数(即使后面还有语句也不再执行)。华东师大计算中心2.在Python中调用函数华东师大计算中心11通过“函数名(参数表)”形式调用如果函数定义时有参数,必须在调用时提供实际参数。实际参数个数、位置要与函数定义时相对应。如果函数定义时没有参数,调用时也必须使用空括号。函数调用的形式直接以语句形式出现(此时不关心函数的返回值)
例如:happy()在表达式中出现(此时一般需要函数有返回值)例如:m=Max(35,x)print(”Max=”,Max(x,y))作为另一个函数调用的实际参数出现
例如:max=Max(Max(x,y),z)函数调用的过程当函数调用发生时------调用程序暂停函数形参被赋值为实参(按位置对应)执行函数体控制返回调用点的下一条语句例6-2-2、例6-2-3
演示华东师大计算中心12函数编程补充实例:生日歌用函数减少重复代码defmain():print(”Happybirthdaytoyou!”)print(”Happybirthdaytoyou!”)print(”Happybirthday,dearFred.”)print(”Happybirthdaytoyou!”)
defhappy():print(”Happybirthdaytoyou!”)defsingFred():happy()happy()print(”Happybirthday,dearFred.”)happy()重复代码的坏处:1.费时费力2.代码维护的一致性(例如:单词拼写错误)华东师大计算中心13编程实例:生日歌(续)用参量增强函数的通用性(代码可重用)defhappy():print(”Happybirthdaytoyou!”)defsing(person):happy()happy()print(”Happybirthday,dear”,person+“.”)happy()defmain():sing(”Fred”)sing(”Lucy”)sing(”Elmer”)华东师大计算中心14函数调用过程图解华东师大计算中心153.函数定义与函数调用中参数间的关系函数定义时的参数称为形式参数(简称形参),函数调用时的参数称为实际参数(简称实参)。函数调用时所提供的实参个数应与函数定义时的形参一致。例6-2-5老王卖西瓜,每天只卖总数的一半多两个。编一程序:输入西瓜总数(小于2000个),输出所需卖的天数。华东师大计算中心16例6-2-5程序deff5(d):day=0x1=int(d)whilex1>1:x2=x1-(int(x1/2)+2)x1=x2day+=1returndayx=input("Entertotalnumber:")whileint(x)in(range(2000)):print("days:",f5(x))#callf5()x=input("Entertotalnumber:")
华东师大计算中心17函数调用时所提供的实际参数个数应与函数定义
时一致。但Python也允许在定义函数时提供默认值,即在函数定义时使用:def函数名(参数1,参数2=值……):……这种形式。这样,在调用函数时如果没有提供相应的参数,则使用该默认值。例:deffunct(a=3):forninrange(a):forminrange(n+1):print("*",end='')print()funct()funct(5)华东师大计算中心18编程实例:求1~10的阶乘之和deffact(n):factorial=1forcounterinrange(1,n+1):factorial*=counterreturnfactorialdefmain():s=0foriinrange(1,11):
s=s+fact(i)print("1!+2!+...+10!=",s)main()说明:简洁,但系统调用耗时增多。华东师大计算中心194.关于程序的两个顺序(1)程序的执行顺序从入口点程序语句开始执行,到执行完毕。遇到调用函数,执行转向被调用函数,执行完子函数,返回调用处,继续向下执行。(2)程序中函数的书写顺序多个函数在定义的时候,其书写顺序与其被调用执行的顺序无关。函数的定义没有先后之分,但要注意,函数是独立的构件,相互之间独立,所以一般不要在一个函数体内定义另一个函数。华东师大计算中心20函数在定义时的书写顺序与调用无关deff2(z):y=1print(z+y)deff1():x=5y=6f2(x)print(x+y)f1()华东师大计算中心21deff1():x=5y=6f2(x)print(x+y)deff2(z):y=1print(z+y)f1()6.2.2函数间的数据联系局部变量和全局变量在一个函数中使用的变量称为局部变量,不允许在函数外或另一函数中使用。在所有函数外定义的变量为全局变量,可以在各函数中使用。程序中过多使用全局变量,将使函数间的耦合变得紧密,破坏函数的独立性。局部变量的作用域只是该函数内部,所以不同的函数中可以有相同名称的变量,它们在各自的函数中互不干扰。当函数执行完毕,局部变量所占有的内存空间也被释放。华东师大计算中心22函数局部变量作用域演示函数中的变量都是局部的它们的作用域只是该函数内部,而且函数执行完毕,变量所占有的内存空间也被释放同一个变量名可以出现在不同的函数中,且互不干扰例:deff1():
x=5y=6#f1()中的y和f2()中的y互不相干
print(x+y)deff2():
y=1print(x+y)#出错!不能引用f1()中的xf1()f2()华东师大计算中心23全局变量与局部变量的说明x='outside'y='global'deff():x='inside'print(x)print(y)f()Print(x)华东师大计算中心24在一个函数中使用的变量称为局部变量,不允许在函数外或另一函数中使用。在函数外定义的变量是全局变量,允许在函数中使用。如果在函数中定义的局部变量与全局变量同名,则局部变量屏蔽全局变量2.函数与调用者之间的数据沟通变量作用域(scope):即可以引用该变量的区域例:函数f2获知f1中某个变量的途径是:
该变量被作为参数传递给f2,
该变量作为返回值传递。deff1():x=5y=6f2(x)print(x+y)deff2(z):y=1print(z+y)f1()华东师大计算中心25deff1():x=5y=6print(x+y)returnxdeff2():y=1print(f1()+y)f1()f2()函数与调用者之间的数据沟通:通过参量从调用者输入值通过返回值向调用者输出值3.传值和传地址调用函数时所提供的实际参数如果是一般变量,仅是单向向函数中提供值,在函数中进行的修改不会影响函数外的该变量值。但列表除外。如果将列表对象作为函数的参数,则向函数中传递的是列表的引用地址,这时在函数中对它的操作将直接改变函数外该列表的值(列表中的部分元素作为函数参数与一般变量相同)。华东师大计算中心26传值和传地址示例华东师大计算中心27defswap(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])defswap(x,y):x,y=y,xprint('x=',x,'y=',y)a=5b=9swap(a,b)print('a=',a,'b=',b)6.3函数应用1、使用函数模块打印以下图形。男孩女孩房子华东师大计算中心28华东师大计算中心29画女孩画一个圆(头)画一个三角形(身体)画一个交叉线(腿)画圆画点线:[3,5]画点线:[2,6]画点线:[3,5]画三角形画交叉线画线段:[1,7]
画交叉线画点线:[4,4]画点线:[3,5]画点线:[2,6]
画点线[start,end]画线段[start,end]华东师大计算中心30画小女孩画圆画点线画三角形画交叉线画点线画线段画交叉线画点线华东师大计算中心31画小男孩画圆画点线画矩形画点线画线段画交叉线画点线画房子画矩形画点线画线段画交叉线画点线设计构造工具函数首先构造画点线和连续线段的两个工具函数,在此基础上再来构建其它图形。drawPoint(start,end):start和end为两个整数,表示点线的两个星号出现的位置,函数的功能是打印一条点线,在start和end位置上打印两个星号。drawLine(start,end):函数的功能是从start开始到end结束,打印一条连续星号构成的线段。根据工具函数创建圆、矩形、交叉线及三角形构件函数drawCilrcle()
drawInsect()
drawRectangle()
drawTriangle()使用圆、矩形、交叉线及三角形构件函数画女孩图形
drawCilrcle()drawTriangle()drawInsect()华东师大计算中心322.自顶向下逐步求精的程序设计在程序设计中采用模块化结构,将一个复杂任务分解为若干相对简单并彼此较独立的模块,还可将这些模块再细分为若干更小的子模块,以利于“分而治之”、“各个击破”。例6-3-3华东师大计算中心33成绩管理系统添加成绩查询成绩按学号个别查询按姓名个别查询按降序整体查询修改记录删除记录成绩统计平均分数不及格同学……退出用Python实现顶部主函数及第一层函数定义框架华东师大计算中心34#functioninsertscoredefinsert():input("insert()----unfinished.")#functionfindscoredeffind():input("find()----unfinished.")#functioneditscoredefedit():input("edit()----unfinished.")#functiondeletescoredefdelete():input("delete()----unfinished.")#functionstatisticsscoredefstat():input("stat()----unfinished.")#functionmaindefmain():print("*************************************")print("scoremanagementsystem")print("*************************************")华东师大计算中心35
print("1.insertscore2.findscore")print("3.editrecord4.deletescore")print("5.statistics0.quit")whileTrue:choice=input("pleaseEnter(0-5):")ifchoice=='1':insert()elifchoice=='2':find()elifchoice=='3':edit()elifchoice=='4':delete()elifchoice=='5':stat()elifchoice=='0':breakelse:print("Entererror!Choiceagain.")print("Thankyouvisit!")#programeentrancemain()6.4模块和Python标准库1.什么是模块?Python模块是一个.py文件,其中包含多个定义的常量和函数代码(以及自定义数据类型、类等),供其他Python程序使用。例如,前面已经使用过的math模块。华东师大计算中心362.内置模块和非内置模块Python中的模块分为内置模块和非内置模块(1)内置模块:通过__builtin__模块提供的,该模块不需手动导入,启动Python时系统会自动导入,任何程序都可以直接使用它们。该模块定义了一些软件开发中常用的函数,可实现了数据类型转换,数据计算,序列的处理、常用字符串处理等。内置函数内置模块中的函数称内置函数(有时又称系统函数)。内置函数使用时不需加模块名前缀。常用的内置函数:print()input()type()help()dir()常用数据类型函数华东师大计算中心38【例】内置模块函数示例###
help(obj)在线帮助,obj可是任何类型,例如查看math模块的内容>>>help(math)##int("123")可将字符串"123"转换为整数123>>>int("123")+int("555")678##
int(78.9)得到整数78(去掉尾部小数)>>>int(78.9)78【例】内置模块函数示例(续)##reper(obj),将任意值转为字符串,常用于构造输出字符串>>>x=10*3.25>>>y=200*200>>>
s='Thevalueofxis'+repr(x)+',andyis'+repr(y)+'...'
>>>print(
s
)Thevalueofxis32.5,andyis40000...##使用round(x,n)可按“四舍五入”法对x保留n位小数>>>round(78.3456,2)78.35##使用len(s)计算字符串的长度>>>len("Goodmorning")12(2)非内置模块库非内置模块以文件的形式存在于python的安装目录中,在使用前需要导入模块。以下主要讨论非内置模块的使用方法。3.模块的使用要使用(非内置)模块中的函数,必须首先导入该模块。Python中使用如下语句来导入模块:import模块名其中模块名也可以有多个,多个模块之间用逗号分隔。该语句通常放在程序的开始部分。可使用内置函数dir()函数检查当前已导入的模块。(使用dir(模块名)可查看模块的内部,如:dir(math)。)华东师大计算中心424.调用(非内置)模块中的函数模块导入后,在程序中使用“模块名.函数名”形式来使用其中的函数。例如:首先导入math模块:importmath。
然后执行以下语句计算(a2+b2)的平方根:print(math.sqrt(a*a+b*b))。华东师大计算中心435.省略“函数名.”前缀使用import语句导入模块后,在程序中调用模块中的函数时要加上“模块名.”前缀。为了简化,可以使用以下语句代替import语句: from模块名import*这样,在调用函数时可以省略“模块名.”前缀。但要注意所引入模块中的函数名等不能与现有系统中的产生冲突。华东师大计算中心44非内置模块导入的三种方法使用方式一导入模块import[模块名]调用函数(或字面常量)[模块名].[函数或字面常量]使用方式二导入模块的函数from[模块名]import[函数名]
调用该函数[函数]使用方式三导入模块中的所有函数from[模块名]import*调用函数(或字面常量)
[函数或字面常量]【例1】方式一示例(以数学库为例)>>>##导入数学库>>>importmath>>>##查看圆周率π常数>>>math.pi3.141592653589793>>>##求x的y次方pow(x,y)>>>math.pow(math.pi,2)9.869604401089358>>>##计算边长为8.3和10.58,两边夹角为37度的三角形的面积的表达式为:
>>>8.3*10.58*math.sin(37.0/180*3.1416)/226.423945174044125math库中的常用函数常用函数描述常用函数描述pi常数π(近似值)pi正函数e常数e(近似值)cos(x)余函数fabs
求绝对值
tan(x)正切函数trunc(x)将一个浮点数结尾为整数
ceil(x)大于等于x的最小整数factorial(x)求x的阶乘floor(x)小于等于x的最大整数pow(x,y)求x的y次方
sqrt(x)求x的平方根
【例2】方式二和方法三示例>>>frommathimportsqrt
#引入数学库中的sqrt函数>>>sqrt(16)4.0如果希望导入math模块中所有的函数定义,而非仅仅是sqrt函数可以使用以下形式:>>>frommathimport*#引入数学库中所有的函数>>>sqrt(16)4.0注意:引入方式不同,对应的函数的使用方式不同,还要注意所引入模块中的函数名等与现有系统中不产生冲突。【例3】使用random模块生成随机数fromrandomimport*输入三次random(),观察每次的值输入三次randint(1,10),观察每次的值输入:result1=[randint(1,100)foriinrange(10)]、result2=[randint(1,100)foriinrange(10)]
然后分别显示result1和result2输入:foriinrange(4):
print(sample([1,2,3,4,5,6,7,8],8))(sample函数从列表里随机选择“不重复”项。)华东师大计算中心496.用户自定义模块*【例3-2-17】自定义函数库示例。创建和使用求三角形面积的自定义函数库。(1)创建py文件例如triangle.py,保存在Python33目录下,此时py文件名就是用户自定义的模块库名。文件的内容为:定义一个CalArea函数用于计算三角形面积,函数需要获取三条边的数据,在函数调用时赋值给变量a,b,c。importmathdefCalArea(a,b,c):
s=(a+b+c)/2.0
area=math.sqrt(s*(s-a)*(s-b)*(s-c))
returnarea(2)导入用户自定义的模块库>>>importtriangle(3)调用用户自定义的函数>>>area=triangle.CalArea(12,33,25)>>>area126.8857754044952>>>华东师大计算中心51上节介绍了可以将自己创建的Python程序文件作为一个模块导入。每个.py文件在运行时都有一个__name__属性。如果作为模块导入,该属性值为模块名;如果文件独立运行,该属性值为“__main__”。通过对其属性值的判断,使文件在两种情况下都能正确使用。很多Python程序采用全函数结构,其中有一个main()函数,在主程序使用以下代码作为程序入口(c语言编程风格):if__name__=="__main__":
main()7.将.py文件用作模块*8.Python“包”*在Python中,与模块相关的还有一个“包”的概念。包是一个目录,其中包含一组模块和一个_init_.py文件(记录该目录中的所有.py文件,也可为空)。可使用以下形式访问包中的函数:
包名.模块名.函数()通常可将所用的所有模块放在当前目录的某一子文件夹内,然后在该文件夹中建一个空的_init_.py文件,以方便访问。华东师大计算中心526.4.2Python标准库随着每个Python版本的发布,会同时发布该版本的Python标准库。Python的标准库中包含很多模块,为操作系统、解释器和互联网之间的交互提供了丰富的工具。其中既有Python语言自身特定的类型和声明,也包含一些只用于少数程序的模块。所有这些模块都得到充分测试,可以用来作为应用开发的起点。华东师大计算中心53标准库中最基本的模块支持内建数据类型操作的模块,如前面提到的用于数学计算操作的math模块;为复数提供类似操作的cmath模块;以及实现常用字符串处理的string模块等。os模块:包含了常用的操作系统功能。sys模块:通过该
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025装饰公司购销合同范文
- 2025年度米厂水稻种植与生物质能发电合作合同4篇
- 2024石材进口与国内分销一体化买卖运输合同3篇
- 二零二五年度刘黎虹伏玉文化艺术品收藏与拍卖合同4篇
- 2025版外贸企业间货物检验合同范本英文版3篇
- 2025年度测绘项目安全管理与责任协议4篇
- 2025加盟店铺的合同范本
- 二手房买卖居间服务合同2024版
- 黄河流域粮食绿色生产效率评价及影响因素研究
- 企业金融化、女性高管参与度对高管薪酬的影响研究
- 开展课外读物负面清单管理的具体实施举措方案
- 2025年云南中烟工业限责任公司招聘420人高频重点提升(共500题)附带答案详解
- 2025-2030年中国洗衣液市场未来发展趋势及前景调研分析报告
- 2024解析:第三章物态变化-基础练(解析版)
- 2023年江苏省南京市中考化学真题
- 供电副所长述职报告
- 校园欺凌问题成因及对策分析研究论文
- 技术支持资料投标书
- 老年人意外事件与与预防
- 预防艾滋病、梅毒和乙肝母婴传播转介服务制度
- 《高速铁路客运安全与应急处理》课程标准
评论
0/150
提交评论