版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第五章设计自己的积木块--函数常州工业职业技术学院119五月2026Python程序设计丁辉袁凯烽商俊燕韩少勇范晓玲郝亚平王霞俊吴春晖目录
Contents01函数基础02函数参数03变量的作用域04函数设计精选案例0507小结2函数基础0141.函数的定义格式程序设计中的函数就是把代码根据功能不同,打包成不同形状的模块,以便编程需要时进行调用,从而实现代码的复用,保证代码的一致性,简化代码的调试与维护工作。通常函数定义遵守“内聚性高,耦合度低”的原则。def函数名([形式参数列表]):‘’’
多行注释,也可以是单行注释 ’’’
函数体(实现函数功能的语句集合)
2.函数的定义示例defadd(a,b):'''这是一个求两个对象之和的函数,
可以求数值的和,字符串的和,列表的和,元组的和等'''c=a+breturnc函数基础5函数返回值和形式参数都不需要类型声明函数的返回值由return返回;无返回值时,可以没有return语句函数体相对于def关键字必须保持一定的空格缩进函数定义首行最后的”:”不能丢函数定义格式的“()”不能省略函数可以没有形式参数列表函数定义注意事项函数基础63.关于注释>>>defadd(a,b):#定义一个函数add()
'''返回两个参数的和,
可以对整数、实数、复数以及列表、元组和字符串求和'‘’ c=a+b returnc#返回所求的和“返回两个参数的和,
可以对整数、实数、复数以及列表、元组和字符串求和”这个注释的文字将存放在函数add的__doc__属性中,当用help(add)查看时,将会显示此注释等信息。>>>help(add)Helponfunctionfuninmodule__main__:
add(a,b)
返回两个参数的和,
可以对整数、实数、复数以及列表、元组和字符串求和也可用print()输出__doc__的值>>>print(add.__doc__)函数基础函数基础74.函数调用Python中函数调用的一般格式是:函数名([实参列表])调用前述自定义的函数add()>>>sum=add(12,34)>>>sum46>>>k=add(54.3,32.4)>>>k86.69999999999999>>>add(1+3j,5-8j)(6-5j)>>>add("you","areagoodboy.")'youareagoodboy.'>>>add([1,2,3],[4,5,6])[1,2,3,4,5,6]>>>add((9,8,7,6),(1,2,3))(9,8,7,6,1,2,3)Python内建函数abs()(求绝对值)的调用>>>abs(23)23>>>abs(-45)45>>>abs(-12.78)12.78函数基础①对于有参函数的调用,首先是将实际参数的值(不可变对象)或引用传递给形式参数变量,然后执行函数体语句,最后返回。比如add(12,34)的调用,就是将12传递给形式参数变量a,将34传递给形式参数变量b,然后执行函数体语句,最后返回所求的和46赋值给sum。②通过上述add()调用的示例,可以看到add()可以求多种类型对象的和,进一步说明Python中为什么变量是没有类型的,变量是指向实际对象的引用。函数基础85.Lambda表达式lambda表达式常用来声明匿名函数,即没有函数名字临时使用的小函数。其语法形式如:lambdaparams:expr其中params表示是参数,可以是多个,用”,”隔开;expr是函数要返回值的表达式。>>>f=lambdax:x**2+5*x+1#定义一个lambda表达式,x是参数>>>f(4)#调用lambda表达式37>>>g=lambdax,y,z:x+y+z#x,y,z是参数>>>g(3,7,1)11>>>g(x=5,z=4,y=4)#使用关键参数调用13>>>g(4,y=5,z=5)#使用位置参数和关键参数调用14函数基础函数基础9简单的匿名函数,节省代码不复用的函数为了获得清晰简洁的代码,增加代码的可读性Lambda表达式一般用在以下这些情况函数基础函数基础函数参数0211函数参数函数参数Python的函数定义非常简单,但是灵活性非常大,比如前述的add()函数,只要传递两个实参对象就可以进行”+”运算。Python函数定义时,形式参数不需要进行类型说明,同样返回值也不需要进行类型说明,这样就给函数功能等带来了很大的灵活性。另外,Python函数的形式参数可以是多种形式,如默认参数、可变参数、关键参数,以提高函数的灵活性,简化调用。12位置参数:前述定义的add()函数有两个形式参数,当调用该函数时需要传递两个实际参数,依次传递给形式参数变量a和b。如add(-12,78.5)的调用,将-12传递a,78.5传递b,由于a,b在定义函数时的顺序就已经确定了,传递时,也是按顺序依次进行传递。像a,b这样的形式参数称之为位置参数。调用函数时,位置参数必须按次序传递,如果调用add()函数时,只给了一个实际参数,如:>>>add(12)Traceback(mostrecentcalllast):File"<pyshell#39>",line1,in<module>fun(12)TypeError:fun()missing1requiredpositionalargument:‘b'从上面输出的错误提示中发现这样的关键词”positionalargument”,从而说明a,b是属于位置参数。>>>pow(6)#Python内置函数Traceback(mostrecentcalllast):File"<pyshell#22>",line1,in<module>pow(6)TypeError:pow()missing1requiredpositionalargument:'n'
同样提示缺少了位置参数n,pow()函数是2个参数,分别是x和n。函数参数1.位置参数13默认参数:在定义函数时,为某些形式参数设置默认值,这类参数称之为默认参数。函数调用时,对于默认参数,如果没有提供实际参数,则使用默认值,如果提供了实际参数,则使用实际参数值。也就是说,在调用函数时,是否为默认参数传递实参是可选的,具有较大的灵活性。带有默认参数的函数定义格式如下:
def函数名(…,形参名=默认值[,…]):‘‘’多行或单行注释’’’函数体
定义一个函数my_pow(),求xy:defmy_pow(x,y=2):"求x的y次方"s=1foriinrange(y):s=s*xreturns>>>my_pow(3,5)#求35,将3传递给x,5传递给y243>>>my_pow(-3)#只提供了一个实参-3,传递给x,形参y使用默认值2,即求(-3)2
9函数参数2.默认参数14通过help()查看Python内置函数print(),结果如下:>>>help(print)Helponbuilt-infunctionprintinmodulebuiltins:
print(...)
print(value,...,sep='',end='\n',file=sys.stdout,flush=False)
Printsthevaluestoastream,ortosys.stdoutbydefault.Optionalkeywordarguments:file:afile-likeobject(stream);defaultstothecurrentsys.stdout.sep:stringinsertedbetweenvalues,defaultaspace.end:stringappendedafterthelastvalue,defaultanewline.flush:whethertoforciblyflushthestream.
可以看到print()函数有四个默认参数,即”sep='',end='\n',file=sys.stdout,flush=False”。sep=''表示各输出项目之间用空格分隔,end='\n'表示一个print()函数输出后,默认回车换行,file=sys.stdout表示默认输出信息输出到标准设备上(一般就是显示器),flush表示是否将输出结果立即刷新到file所指的文件里,True表示立即刷新,False表示到关闭file所指的文件时才刷新。“value,...”表示多个输出项。print()函数的功能是将一个或多个value输出到一个数据流文件,默认输出到标准输出设备上(sys.stdout)。默认参数要放在位置参数之后。如下定义函数时,就会出现错误提示:>>>defpow(y=2,x):s=1SyntaxError:non-defaultargumentfollowsdefaultargument错误的中文意思是:非默认参数跟在默认参数后。函数参数2.默认参数15关键参数:如果一个函数有多个参数,在调用时,如果不想按位置顺序提供实参,那么可以按形式参数名来传递参数。这种参数传递方式称为关键参数。对前面定义的add()、pow()函数采用关键参数调用如下:>>>add(b='czili.',a='Myschoolis')'Myschoolisczili.'>>>pow(n=5,x=4)1024采用关键参数进行参数传递,可以不用考虑参数传递的顺序。避免了用户需要牢记参数顺序的麻烦,使得函数调用更加灵活方便。关键参数是一种参数传递方式。函数参数3.关键参数16可变长度参数:顾名思义就是传入的参数个数是可变的。Python中可变长度参数有两种形式,分别是*args和**kwds。*args用来接收任意多个实参并将其放在一个元组中,**kwds用来接收类似于关键字参数形式的多个实参,并放入字典中。*args形式参数的函数定义。定义一个函数,求不定长序列的和,即求:a+b+c+……,所求序列的长度是不确定的,为此采用*args这种不定长参数的形式来定义函数如下:>>>defsum(*args): print(type(args))#查看一下args的类型 s=0 forkinargs:s=s+k print(s)sum()函数的调用>>>sum(1,2,3)<class'tuple'>#形参args是一个元组6>>>sum(-34.5,23,79.8,234)<class'tuple'>302.3函数参数4.可变长度参数17**kwds形式参数的函数定义>>>deffun(**kwds): print(type(kwds))#查看一下kwds的类型 forkey,vinkwds.items():#遍历一下kwds print(key,v)fun()函数的调用其实就是采用关键字参数的形式进行调用>>>fun(name='wang',sex='F',age=18)<class'dict'>#形式参数保存成字典的类型namewangsexFage18函数定义时,可以使用位置参数、默认参数和可变长度参数等多种形式参数的组合,但是需要注意参数定义时的顺序为:位置参数→默认参数→可变长度参数。函数参数4.可变长度参数18关于参数传递,需要理解的是值传递还是引用传递。如果实参是不可变对象,则是值传递,如果实参是可变对象,则是引用传递。由于引用传递,在函数内修改引用对象的值时,这个修改也会改变实参引用对象的值。但是如果在函数内又重新创建了对象,并且是形参指向了新的对象,则不会修改实参引用对象的值。通过以下示例来进一步理解引用传递。>>>deffun_1(x):#定义一个函数 print(x)#输出传递过来的列表 x.append(8)#给列表追加一个元素8,修改了列表的值 print(x) #输出新列表的值>>>list=[0,1,2,3]>>>fun_1(list)#实参列表为可变对象[0,1,2,3][0,1,2,3,8]>>>list#调用函数后list的值[0,1,2,3,8]
这个案例说明,在用列表作实参调用函数时,在函数内部修改了列表的值,则实参引用对
象list的值也改变了>>>deffun_2(x): print(x)
x=x+[88]#创建了一个新的列表 print(x)>>>list=[0,1,2,3]>>>fun_2(list)[0,1,2,3][0,1,2,3,88]>>>list[0,1,2,3]#此处的list没有改变由于函数内的语句”x=x+[88]”是创建了新的列表对象,所以实参引用对象就不会改变了函数参数5.关于参数传递可以使用id()函数查看对象的地址,从而更好地理解变量所指向的对象。变量的作用域0320变量的作用域就是变量起作用的范围,或者说是可以被哪部分程序访问,也可称为命名空间。一个变量在函数内部和外部定义,其作用域不同;如果用特殊关键字定义的变量,其作用域也有相应的规则。Python中根据作用域将变量分为局部变量和全局变量两种。函数参数变量的作用域21局部变量:在函数内部定义的变量(包括形式参数变量),其作用范围只在定义之后,到函数结束为止,这类变量是局部变量。【例5-1】编程求圆的面积。#eg5_1.py#局部变量应用示例importmath#定义一个求圆面积的函数defcircle(r):print(“circle函数内局部变量r=%.2f"%r)s=math.pi*r*r#求面积r=8#修改函数内局部变量r的值print("修改rg,circle函数内局部变量r=%.2f"%r)returns#返回所求的面积
r=float(input(“请输入圆的半径:”))#全局变量rprint(“circle函数外全局变量r=%.2f"%r)#调用函数求圆的面积area=circle(r)print(“circle函数调用后,全局变量r=%.2f"%r)print("半径为%.2f的圆,面积是%.2f"%(r,area))print(“在函数外输出circle函数内变量s的值%.2f"%(s))【例5-1】运行结果请输入圆的半径:6circle函数外全局变量r=6.00circle函数内局部变量r=6.00修改后,circle函数内局部变量r=8.00circle函数调用后,全局变量r=6.00Traceback(mostrecentcalllast):File"E:/ding/Python-code/ch3_1.py",line21,in<module>print("在函数外输出circle()函数内变量s的值%.2f"%(s))NameError:name's'isnotdefined请结合运行结果理解局部变量的作用范围函数参数1.局部变量22全局变量:在函数外定义的变量,是全局变量,其作用域是整个程序范围。【例5-2】全局变量的应用示例。#eg5_2.py#writebyding#2018-7-24total=0#定义一个全局变量print("全局变量初始值为:%d"%total)
defsum(a,b):’’’使用关键字”global”说明全局变量之后,才可以修改其值,否则只能引用其值,不能修改’’’globaltotaltotal=a+b
sum(25,38)print("全局变量修改后的值为:%d"%total)【例5-2】运行结果全局变量初始值为:0全局变量修改后的值为:63函数参数2.全局变量23在函数内部使用全局变量,如果只是引用其值,则可以直接使用;如果需要修改全局变量的值,则需要使用关键字”global”进行说明之后才能修其值。当局部变量和全局内变量同名时,那么在局部变量作用域内会隐藏全局变量。如【例5-1】的r,在函数circle()内部时,是局部变量r有效。12函数参数注意虽然全局变量的作用范围是全部程序,但是不建议多用全局变量。全局变量的使用降低了软件的质量,使程序的调试、维护变得困难。日常生活中我们要正确处理全局和局部利益的关系!服从大局,树立大局意识。函数设计精选案例0425函数参数函数设计精选案例
函数的设计同样使用IPO模式进行分析,I(输入数据)就是对应函数的参数,O(输出结果)就是函数的返回值,也可以直接在函数体内进行输出。P(算法)就是函数体,对输入参数进行处理,获得返回值或者是输出结果。
对于前述定义的函数add(),其I为两个参数a,b;O为返回值c;P比较简单,就是求a+b。
再比如定义一个求xn的函数,其I为两个参数,分别为x和n;O为xn;P为计算n个x相乘。因此函数定义如下:defpow(x,n):y=1foriinrange(n): y=y*xreturny26【例5-3】编写一个计算梯形面积的函数。分析:最基本的梯形面积计算公式是:s梯=(上底+下底)×高÷2。因此需要三个参数即上底、下底和高。返回值就是所计算的面积。#eg5_3.py#writebyding#2018-5-8
importmathdeft_Area(a,b,h):#对输入的参数进行检查,确保是数值ifisinstance(a,(int,float))andisinstance(b,(int,float))andisinstance(h,(int,float)):s=(a+b)*h/2returnselse:print("必须输入的是整数或实数。")
print(t_Area(5,8,4))print(t_Area(5,8,’k’)函数参数函数设计精选案例27【例5-4】编写一个函数,对所接收字符串中大小写字母个数进行统计,并将统计结果按先大写后小写字母的个数,采用元组的形式进行返回。分析:函数的参数是一个字符串,返回值是两个整数,用元组的形式进行返回。#eg5_4.py#writebyding#2018-5-8
defs_Count(s):t=[0,0]forchins:ifch.isupper():t[0]+=1elifch.islower():t[1]+=1returntuple(t)
print(s_Count("aA12KmlyuL08!#R"))函数参数函数设计精选案例28【例5-5】编写一函数,判断一个正整数是否是素数,如果是则返回True,否则返回False。#eg5_5.py#writebyding#2018-5-8importmathdefprime_judg(s):#由于range()不包含终值,所以要加1foriinrange(2,int(math.sqrt(s))+1):ifs%i==0:breakelse:returnTruereturnFalse
print(prime_judg(13))print(prime_judg(17))print(prime_judg(15))函数参数函数设计精选案例29【例5-6】编写一函数,要求接收一个正的偶数,输出两个素数,并且这两个素数之和等于原来的正偶数。如果存在多组符合条件的素数,则全部输出。分析:函数的参数是一个正偶数,函数的功能是输出全部素数组合,不需要返回值。#eg5_6.py#writebyding#2018-5-8importeg5_5defeven_dec(m):ifm%2==0andm>0:#range()的终止值是int(m/2)+1,不能超过此值,否则会有重复的输出foriinrange(3,int(m/2)+1):ifi%2==1andeg5_5.prime_judg(i)andeg5_5.prime_judg(m-i):print("%d=%d+%d"%(m,i,m-i))
even_dec(34)【例5-6】中调用了【例5-5】的函数,因此调试时,需要把【例5-5】函数的代码导入,即importeg5_5。函数参数函数设计精选案例30【例5-7】微信抢红包很能吸引人
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026云南昭通市绥江县发展和改革局聘用编外人员招聘1人笔试备考题库及答案解析
- 2026吉林农业科技学院体育教师招聘1人笔试模拟试题及答案解析
- 湛江市霞山区教育系统招聘教师考试真题
- 2026广东佛山顺德区新球中学面向社会招聘教师笔试参考题库及答案解析
- 昆明市消防救援局政府专职消防员招聘考试真题
- 2026江西中医药大学资产管理处招聘行政助理1人考试模拟试题及答案解析
- 2019-2020学年北京市北京第高二下期末政治试卷
- 2026届高考语文诗歌专练-谢翱诗歌(含答案)
- 2026年新疆和田市招才引智招聘工作人员(15人)笔试备考试题及答案解析
- 2026年哑光白铝塑板行业分析报告及未来发展趋势报告
- DL-T596-2021电力设备预防性试验规程
- 不同水质与底质条件对沉水植物的生长影响差异研究的开题报告
- 一年级-民族团结教育主题班会
- 小动物常规临床检查皮肤
- 三好三维构造识图题库
- TCCUA 003-2019 金融信息科技服务外包风险管理能力成熟度评估规范
- 湖北省建筑工程施工统一用表(2023年版全套)
- 烟草专卖违法行为课件
- YY/T 0634-2022眼科仪器眼底照相机
- GB/T 3934-2003普通螺纹量规技术条件
- GB/T 28387.2-2012印刷机械和纸加工机械的设计及结构安全规则第2部分:印刷机、上光机和印前机械
评论
0/150
提交评论