版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
筐鱼梧领凤峡匪跑脚凡辅乒踪勿久褂舟婴袭剪肚爹伦甄啸镣娟附卉态再骂广东农工商职业技术学院PPT模板-精美原创毕业论文答辩广东农工商职业技术学院PPT模板-精美原创毕业论文答辩项目5函数的高级应用目录|CONTENT1项目介绍2项目目标3项目准备4项目实施项目介绍项目背景本项目提供了Python函数相关的一些高级概念和使用方法,能够帮助大家完成更复杂的任务。项目介绍项目规划01熟悉变量作用域、函数嵌套定义、lambda函数、闭包、装饰器等概念和设计方法02熟悉递归等程序设计方法03能综合运用Python相关知识点解决典型程序设计问题目录|CONTENT1项目介绍2项目目标3项目准备4项目实施项目目标知识目标1掌握Python函数相关的高级概念2熟悉递归的设计思想3熟悉经典问题的编程方法项目目标能力目标1了解Python函数相关高级方法的使用2了解使用递归解决问题的方法3掌握常用程序设计思想目录|CONTENT1项目介绍2项目目标3项目准备4项目实施项目准备1.变量的作用域变量的作用域是指一个变量能够作用的范围,也就是在多大范围内能够被解释器识别。根据变量的作用域,变量可分为全局变量和局部变量。声明在函数外部的变量,被称为全局变量,作用范围是所在程序文件内从定义开始至程序结束,包括变量定义后所调用的函数内部。项目准备2.函数的嵌套定义和nonlocal关键字Python函数的定义可以嵌套。并可以通过nonlocal关键字,可以使内层的函数值接使用外层函数中定义的变量。defouter():x=10#x为外部函数的局部变量definner():#定义内部函数x=20#x为内部函数局部变量 print('inner函数中的x值为:',x)inner()#调用inner函数print('outer函数中的x值为:',x)outer()#调用outer函数defouter():x=10#x为外部函数的局部变量definner():#定义内部函数nonlocalx#nonlocal声明 x=20#将x赋为20 print('inner函数中的x值为:',x) inner()#调用inner函数 print('outer函数中的x值为:',x)outer()#调用outer函数项目准备3.lambda函数lambda函数是一个匿名函数,有时也被称为lambda表达式,比def格式的函数定义简单很多。lambda函数可以接收任意多个参数,但只返回一个表达式的值。lambda中不能包含多个表达式。lambda定义形式如下:lambda[参数1[,参数2,...,参数n]]:表达式项目准备4.闭包如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了闭包。定义在外层函数中但由内层函数使用的变量被称为自由变量。defouter(x):#定义函数outery=10#定义局部变量y并赋为10
definner(z):#在outer函数中定义嵌套函数innernonlocalx,y#nonlocal声明
returnx+y+z#返回x+y+z的结果
returninner#返回嵌套函数inner的引用f=outer(5)#将返回的inner函数赋给fprint('f(20)的值为:',f(20))#print()函数输出的值为35项目准备5.装饰器装饰器实际上就是闭包。利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能。在装饰器外层函数的形参列表中只有一个形参func,接收要装饰的函数,在内层函数中直接调用func即表示执行所装饰的函数中的代码。将装饰器内层函数的形参列表写为“*args,**kwargs”,表示要装饰的函数可以具有任意形式的形参列表;对应地,调用要装饰的函数时也要将实参列表写为“*args,**kwargs”。在要装饰的函数前面写上“@装饰器名”,即可将装饰器中的代码注入到该函数中。项目准备6.递归函数内部可以调用其他函数。如果一个函数在内部直接或间接地调用自己本身,这是一种递归的方法。递归是一种非常实用的程序设计技术。许多问题具有递归的特性,在某些情况下,用其他方法很难解决的问题,利用递归可以轻松解决。目录|CONTENT1项目介绍2项目目标3项目准备4项目实施项目实施任务5.1将输入升序输出在Python中,如果想实现可重复使用,并且目的特定的功能,可以通过函数来实现。函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。Python中既包括内置函数,也可以自己创建函数,这被叫做用户自定义函数。项目实施任务5.1将输入升序输出建立“将输入升序输出.py”文件,用于编写Python实验程序编写任务代码。#定义一个函数,其内部实现为通过sorted函数对输入参数进行升序排序,并打印defsortAndPrint(x,y,z):print(sorted((x,y,z)))
#编写程序的主入口,调用sortAndPrint函数实现排序及打印功能if__name__=='__main__':sortAndPrint(5,10,3)项目实施任务5.1将输入升序输出执行程序①鼠标右键单击右侧编辑窗口,在菜单中选择“Run‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“将输入升序输出”
②在IDE下方控制台查看输出结果项目实施任务5.2斐波那契数列斐波那契数列(Fibonaccisequence),又称黄金分割数列,因数学家莱昂纳多·斐波那契(LeonardoFibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”,指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波那契数列以如下被以递推的方法定义:F(0)=0,F(1)=1,F(n)=F(n-1)+F(n-2)(n≥2,n∈N*)在现代物理、准晶体结构、化学等领域,斐波纳契数列都有直接的应用。项目实施任务5.2斐波那契数列建立“斐波那契数列.py”文件,用于编写Python实验程序编写任务代码。#定义一个函数,该函数接收一个参数n,用于计算斐波那契数列项。当n小于等于0时,返回的数列项值为0defFibonacci_Recursion_tool(n):ifn<=0:return0elifn==1:#实现当n等于1时,返回的数列项值为1return1else:#实现当n非0非1时,返回的数列项值为f(n-1)+f(n-2)returnFibonacci_Recursion_tool(n-1)+Fibonacci_Recursion_tool(n-2)
#定义一个函数,该函数接收一个参数n,用于计算1-n之间的斐波那契数列。该函数的实现为,遍历1-n之间的数,并依次调用Fibonacci_Recursion_tool函数计算数列项,并将计算的结果保存至一个列表中defFibonacci_Recursion(n):result_list=[]foriinrange(1,n+1):result_list.append(Fibonacci_Recursion_tool(i))returnresult_list
#编写程序入口,调用Fibonacci_Recursion函数,并传入100作为实参,计算10个斐波那契数列项,并打印if__name__=='__main__':result=Fibonacci_Recursion(10)print(result)项目实施任务5.2斐波那契数列执行程序①鼠标右键单击右侧编辑窗口,在菜单中选择“Run‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“将输入升序输出”②在IDE下方控制台查看输出结果项目实施任务5.3阶乘之和评价与考核一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。亦即n!=1×2×3×...×(n-1)×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。本任务求解1到20的正整数的各自阶乘并求和。项目实施任务5.3阶乘之和评价与考核建立“阶乘之和.py”文件,用于编写Python实验程序编写任务代码。#引入reduce函数用于之后的聚合计算fromfunctoolsimportreduce#定义函数factorialA,该函数接收一个参数n,内部通过递归的方式计算n的阶乘并返回deffactorialA(n):ifn==1:return1else:returnn*factorialA(n-1)#定义函数factorialB,该函数接收一个参数n,内部通过lambda表达式以及聚合函数计算n的阶乘并返回deffactorialB(n):returnreduce(lambdax,y:x*y,range(1,n+1))#编写程序主入口,计算1-20的阶乘之和,并打印if__name__=='__main__':sum=0;foriinrange(1,21):sum+=factorialA(i)print(sum)项目实施任务5.3阶乘之和评价与考核执行程序①鼠标右键单击右侧编辑窗口,在菜单中选择“Run‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“阶乘之和”②在IDE下方控制台查看输出结果项目实施任务5.4计算圆的面积圆的面积公式我们都比较熟悉:,其中,π为圆周率,是一个常数;r为圆的半径。在实际的程序中,除了要通过程序正确表达计算公式,还要对公式中各输入中的正确性进行判断,例如:r是圆的半径,应该是一个整数或者浮点数,如果用户输入了一个字符串,则是非法字符,无法进行计算,需要用户重新输入。项目实施任务5.4计算圆的面积建立“计算圆的面积.py”文件,用于编写Python实验程序编写任务代码。importmath#引入math包,用于获取pi的值
#定义一个函数用于校验被修饰函数的参数类型,其接收一个func参数,即为被修饰的函数defvalidate(func):defvalidate(*arg,**kw):iftype(eval(str(arg[0])))==intortype(eval(str(arg[0])))==float:arg=(float(arg[0]),)returnfunc(*arg,**kw)else:print('请传入一个数字')returnvalidate#定义被修饰的函数,该函数接收一个参数r,表示圆的半径,其功能为计算圆的面积。在函数名上方添加@validate使用修饰器校验参数类型@validatedefarea(r):returnr*r*math.piif__name__=='__main__':print(area(5.4))项目实施任务5.4计算圆的面积执行程序①鼠标右键单击右侧编辑窗口,在菜单中选择“Run‘python主程序所在文件名’”一项执行编写好的Python程序,本次实验文件名为“计算圆的面积”②在IDE下方控制台查看输出结果课后练习与技能训练一、填空题练习按照作用域的不同,Python中的变量可以分为局部变量和
。在一个函数中使用关键字,可以声明在该函数中使用的是全局变量、而非局部变量。通过
关键字,可以使内层的函数直接使用外层函数中定义的变量。
函数是指在一个函数内部通过调用自己来完成一个问题的求解。
函数也称为匿名函数,是一种不使用def定义函数的形式,其作用是能快速定义一个简短的函数。lambda函数的函数体只是一个
,所以lambda函数通常只能实现比较简单的功能。如果内层函数使用了外层函数中定义的局部变量,并且外层函数的返回值是内层函数的引用,就构成了
。课后练习与技能训练二、选择题练习1.下列说法中错误的是()在一个函数中定义的变量就是局部变量局部变量的作用域是从定义位置到函数结束位置在所有函数外定义的变量就是全局变量全局变量的作用域是从定义位置到程序结束位置课后练习与技能训练二、选择题练习2.下列关于装饰器的说法错误的是()A.利用装饰器,可以在不修改已有函数的情况下向已有函数中注入代码,使其具备新的功能B.一个装饰器可以为多个函数注入代码,一个函数也可以注入多个装饰器的代码C.一个装饰器可以为多个函数注入代码,而一个函数只能注入一个装饰器的代码D.装饰器实际上就是一种闭包课后练习与技能训练三、简答题练习1.写出下面程序的输出结果。defouter():x=100globalyy=200definner():nonlocalxx=1000y=2000print('inner函数中的x,y值为:',x,y)inner()print('outer函数中的x,y值为:',x,y)x=10y=20outer()print("执行outer,inner函数之后x,y值为:",x,y)课后练习与技能训练三、简答题练习2.写出下面闭包程序的输出结果。deff(x):y=100definner(z):
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论