【文档说明】Python06_用函数实现代码复用课件.pptx,共(26)页,167.746 KB,由小橙橙上传
转载请保留链接:https://www.ichengzhen.cn/view-2358.html
以下为本文档部分文字说明:
6用函数实现代码复用第6章用函数实现代码复用本章内容函数的定义和调用函数的参数和返回值闭包和递归函数变量的作用域PYTHON的内置函数6.1函数的定义和调用函数是实现某一特定功能的语句集合函数复用,提高了代码的可重用性函
数实现单一的功能,提高了程序的独立性同一个函数,通过接收不同的参数,实现不同的功能,提高了程序的适应性内置函数,用户定义函数6.1函数的定义和调用函数的定义使用def关键字deffuncname(paras):statementsreturn[e
xpression]●def关键字开头,后接函数名和圆括号()●paras是函数的参数,参数之间用逗号分隔●statements是函数体●函数声明以冒号结束,函数体内需要缩进●return语句用于结束函数,将返
回值传递给调用语句。不带表达式的return返回None值。6.1函数的定义和调用函数的调用通过函数名加上一组圆括号来调用函数,圆括号内是参数,多个参数之间用逗号分隔。def是可执行语句,函数的调用必须在函数定义之后。>>>defgetcirclearea(r
):print("圆的面积是:{:>8.2f}".format(3.14*r*r))return>>>getcirclearea(3)圆的面积是:28.266.1函数的定义和调用函数的嵌套函数的嵌套定义在函数内部定义的函数,内嵌的函数只能在该函数内部
使用,闭包应用了函数的嵌套定义。函数的嵌套调用在一个函数的内部调用其他函数的过程。嵌套调用是模块化程序设计的基础,合理划分不同的函数,有利于实现程序的模块化。6.2函数的参数和返回值函数的参数定义函数时,参数表中的参数称为形式参数,
也称形参。调用函数时,参数表中的参数称为实际参数,也称实参。调用函数的过程就是将实参传递给形参的过程。1.位置参数函数调用时,默认情况下,实参将按照位置顺序传递给形参。defgetvolume(r,h):print("圆的体积是:{:>8.2f}".for
mat(3.14*r*r*h))调用函数时,执行getvolume(3,4)和getvolume(4,3),两个函数的逻辑含义是不同的。6.2函数的参数和返回值函数的参数2.赋值参数Python提供了按照形参名称输入实参的方式,这种参数称为赋值参数。>>>defgetscore(p
e,eng,math,phy,chem):returnpe*0.5+eng*1+math*1.2+phy*1+chem*1>>>getscore(93,89,78,89,72)#按位置传递390.1>>>getsco
re(pe=93,math=78,chem=72,eng=89,phy=89)390.16.2函数的参数和返回值函数的参数3.参数值的类型参数值的类型是指函数调用时,传递的实际参数是基本数据类型还是组合数据类型,不同的参数类型在函数调用后,参数值的变化是不同的。基本数据类
型作为实参时,是将常量或变量的值传递给形参,是一种值传递的过程。列表、元组、字典等组合数据类型的变量用做函数参数时,形参和实参之间传递的只是组合数据类型变量(参数)的地址。6.2函数的参数和返回值默认
参数定义函数时,为函数的形式参数设置默认值,该参数被称为默认参数。调用函数时,默认参数在定义时已经被赋值,可以忽略,其它参数是必须要传入值。若默认参数没有传入值,则直接使用默认的值;如果默认参数传入了值,则使用传入的新值替代。带有默认值的参数一定要位于参数列表的最后面。例6-
8默认参数的应用。6.2函数的参数和返回值函数的返回值返回值可以是任何数据类型return[expression]语句将表达式值作为返回值传递给调用方。不带参数值的return语句返回None。例6-11return关键字的应用。>>>
defcompare(arg1,arg2):result=arg1>arg2returnresult#函数体内result值>>>btest=compare(10,9.99)#调用sum函数>>>print("函数的返回值:",btest)函
数的返回值:True6.2函数的参数和返回值lambda函数匿名函数,是一个lambda表达式,是不需要使用def关键字定义的函数。lambdaparas:expressionparas是可选的参数表;expression是函数表达式,不能
包含分支或循环语句。expression的值做为lambda函数的返回值。应用场景是定义简单的、能用一行表示的函数,返回函数类型。Python具有函数式编程的特性,map、reduce、filter、sor
ted等函数都支持函数作为参数,lambda函数可以方便地应用在函数式编程中。6.3闭包和递归函数闭包*Python支持闭包(closure)语法结构。内部函数引用了外部函数作用域的变量,这个内部函数被称为闭包。在Python中创
建一个闭包需要满足以下条件●闭包函数必须有嵌套函数。●嵌套函数需要引用外部函数中的变量。●外部函数需要将嵌套函数名作为返回值返回。6.3闭包和递归函数递归函数函数在其定义或声明中直接或间接调用自身的一种方法。递归的
基本思想在求解一个问题时,将该问题递退简化为一个规模较小的同一问题,并设法求得这个规模较小的问题的解,在此基础上再递进求解原来的问题。如果经递退简化的问题还难以求解,可以再进行递退简化,直至将问题递退简化到一个容易
求解的基本问题为止。在此基础上进行递进求解,直至求得原问题的解。6.3闭包和递归函数递归函数●一个递归的方法即为直接或间接地调用自身的方法;●任何一个递归方法都必须有一个递归出口。例6-16求斐波那契数列第i个元素的递归函数2deffib(i):3ifi==0:4return05eli
fi==1:6return17else:8returnfib(i-1)+fib(i-2)10print(fib(8))6.4变量的作用域局部变量定义在函数内的变量,其作用范围是从函数定义开始,到函数执行结束。例6-19局部变量的作用域两个函数func1()和func2()。
分别定义了局部变量x1,y1,z,在各自的函数中互不影响。>>>deffunc1(x,y):x1=x;y1=yz=100print("infunc1(),x1=",x1)print("infunc1(),y1=",y1)print("infunc1(),z=",
z)func2()return>>>deffunc2():x1=10;y1=20z=0print("infunc2(),x1=",x1)print("infunc2(),y1=",y1)print("infunc2(),z=",z)6.4变量
的作用域全局变量是定义在函数外的变量,它拥有全局作用域。1.读取全局变量全局变量在各函数内部是只读的,的用是受限的。例6-20函数外定义的全局变量在函数内读取(不修改)。1#ex0620.py2basis=100#全局变量3deffunc1(x,y):#计算总分4su
m=basis+x+y5returnsum7deffunc2(x,y):#计算平均分8avg=(basis+x*0.9+y*0.8)/39returnavg1011score1=func1(75,62)12score2=func2(75,62)6.4变量的作用域全局变量2.在函数中定
义了与全局变量同名的变量例6-21函数中定义了与全局变量同名的变量,实质是局部变量。3.不允许在函数中先使用与全局变量同名的变量例6-22函数中使用全局变量,程序异常。6.4变量的作用域global语句为了在函数内部能读写全局变量,Python提供了global语句,用于在函数
内部声明全局变量。例6-23global语句的应用。1#ex0623.py2basis=100#全局变量3deffunc4(x,y):4globalbasis#声明basis是函数外的全局变量5print(basis)#1006basis=907sum=
basis+x+y8returnsum10print(func4(75,62))11print(basis)#906.5Python的内置函数数学运算函数函数名示例abs()abs(-2),abs(3.77)divmod()divmod(10,3)max
()max(-1,1,2,3,4),max('abcef989')min()min(-1,12,3,4,5)pow()pow(2,3),pow(2,3,5)round()round(1.456778),round(1.45677,2)sum()
sum((1,2,3,4)),sum((1,2,3,4),-10)6.5Python的内置函数字符串运算函数字符串作为一种最常用的数据类型,它提供了大小写转换、查找替换、拆分合并等函数6.5Python的内置函
数转换函数转换函数主要用于不同数据类型之间的转换,函数名示例bool()bool('str'),bool(0)int()int(3),int(3.6)float()float(3),float('3.4')complexcom
plex('1+2j'),complex(1,2)str()()str(123),str('abc')ord()ord('a')chr()chr(97)bin()bin(3)oct()oct(10)h
ex()hex(15)6.5Python的内置函数序列操作函数序列包括字符串、列表、元组等,下列函数主要针对列表、元组两种数据结构。函数名功能说明all()判断可迭代对象的每个元素是否都为True值any()判断可迭代对象的元素
是否有为True值的元素range()产生一个序列,默认从0开始map()使用指定方法去操作传入的每个可迭代对象的元素,生成新的可迭代对象filter()使用指定方法过滤可迭代对象的元素reduce()使用指定方法累积可迭代对象的元素zip()聚
合传入的每个迭代器中相同位置的元素,返回一个新的元组类型迭代器sorted()对可迭代对象进行排序,返回一个新的列表reversed()反转序列生成新的可迭代对象小结函数使用def关键字定义。在定义函数时,参数表中的参数称为形式参数,形参可以分
为位置参数、赋值参数、可变参数等类型。一个函数调用自身叫做递归调用。lambda函数是Python中的匿名函数,,不需要使用def关键字定义。变量可以分为局部变量和全局变量。Python提供了global语句,用于在函数内部声明全局变量。Python提供了实现各种功
能的内置函数,包括数学运算、字符串运算、转换函数、序列操作函数等。作业:(1)编写函数isodd(x),若x不是整数,给出提示后退出程序;如果x为奇数,返回True,如果x为偶数,返回False。(2)编写函数change(str1),其功能是对参数str
1进行大小写转换,其中的大写字母转换成小写字母;小写字母转换成大写字母;非英文字符不转换。(3)编写并测试函数gcd(m,n)和lcm(m,n),功能是求两个整数的最大公约数和最小公倍数。(4)编写并测试函数reverse(x),输入一个整数,将各位数字反转
后输出。(5)用递归方法反转一个字符串,例如“abcde”,反转为“edcba”。(6)编写程序求12-22+32-42+…+972-982+992。