Python基础与大数据应用第三章-函数课件.pptx

上传人(卖家):三亚风情 文档编号:3371823 上传时间:2022-08-24 格式:PPTX 页数:36 大小:1.54MB
下载 相关 举报
Python基础与大数据应用第三章-函数课件.pptx_第1页
第1页 / 共36页
Python基础与大数据应用第三章-函数课件.pptx_第2页
第2页 / 共36页
Python基础与大数据应用第三章-函数课件.pptx_第3页
第3页 / 共36页
Python基础与大数据应用第三章-函数课件.pptx_第4页
第4页 / 共36页
Python基础与大数据应用第三章-函数课件.pptx_第5页
第5页 / 共36页
点击查看更多>>
资源描述

1、第三章 函数北京西普阳光教育科技股份有限公司 中国IT教育解决方案专家 2018年10月制作:丁辉1目 录 Contents01自定义函数02函数调用03函数参数04变量作用域050607异常项目训练07小结2自定义函数0141.函数的定义格式程序设计中的就是把代码根据功能不同打包成不同形状的,以便编程需要时进行调用,从而实现代码的复用,保证代码的一致性,简化代码的调试与维护工作。通常函数定义遵守“内聚性高,耦合度低”的原则。def 函数名(形式参数列表):多行注释,也可以是单行注释 函数体 2.函数的定义示例def fun(a,b):这是一个求两个对象之和的函数,可以求数值的和,字符串的和,

2、列表的和,元组的和等 c=a+b return c函数定义注意事项53.关于注释 def fun(a,b):#定义一个函数fun()返回两个参数的和,可以对整数、实数、复数以及列表、元组和字符串求和c=a+breturn c#返回所求的和“返回两个参数的和,可以对整数、实数、复数以及列表、元组和字符串求和”这个注释的文字将存放在函数fun)的_doc_属性中,当用help(fun)查看时,将会显示此注释等信息。help(fun)也可Help on function fun in module _main_:fun(a,by)返回两个参数的和,可以对整数、实数、复数以及列表、元组和字符串求和用p

3、rint()输出_doc_的值 print(fun._doc_)64.函数设计 函数的设计同样使用模式进行分析,(输入数据)就是对应函数的,(输出结果)就是函数的,也可以直接在函数体内进行输出。(算法)就是,对输入参数进行处理,获得返回值或者是输出结果。对于前述定义的函数fun(),其I为两个参数a,b;O为返回值c;P比较简单,就是求a+b。再比如定义一个求xn的函数,其I为两个参数,分别为x和n;O为xn;P为计算n个x相乘。因此函数定义如下:def pow(x,n):y=1 for i in range(n):y=y*x return y75.Lambda表达式lambda表达式常用来声

4、明匿名函数,即没有函数名字临时使用的小函数。其语法形式如:lambda params:expr其中params表示是参数,可以是多个,用”,”隔开;expr是函数要返回值的表达式。f=lambda x:x*2+5*x+1#定义一个lambda表达式,x是参数 f(4)#调用lambda表达式37 g=lambda x,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)#使用位置参数和关键参数调用14Lambda表达式一般用在以下这些情况函数调用029Python中函数调用的一般格式是:函数名(实参列表)l 调

5、用前述自定义的函数fun()sum=fun(12,34)sum46 k=fun(54.3,32.4)k86.69999999999999 fun(1+3j,5-8j)(6-5j)fun(you,are a good boy.)you are a good boy.fun(1,2,3,4,5,6)1,2,3,4,5,6 fun(9,8,7,6),(1,2,3)(9,8,7,6,1,2,3)l Python内建函数abs()(求绝对值)、pow()的调用 abs(23)23 abs(-45)45 abs(-12.78)12.78 pow(5,3)125 pow(-4,3)-64 对于有参函数的调用

6、,首先是将实际参数的值(不可变对象)或引用传递给形式参数变量,然后执行函数体语句,最后返回。比如fun(12,34)的调用,就是将12传递给形式参数变量a,将34传递给形式参数变量b,然后执行函数体语句,最后返回所求的和46赋值给sum。通过上述fun()调用的示例,可以看到fun()可以求多类型对象的和,进一步说明Python中为什么变量是没有类型的,变量是指向实际对象的引用。函数参数0311Python的函数定义非常简单,但是灵活性非常大,比如前述的fun()函数,只要传递两个实参对象就可以进行”+”运算。Python函数定义时,形式参数不需要进行类型说明,同样返回值也不需要进行类型说明,

7、这样就给函数功能等带来了很大的灵活性。另外,Python函数的形式参数可以是多种形式,如默认参数、可变参数、关键参数,以提高函数的灵活性,简化调用。函数参数函数参数函数参数121.位置参数l前述定义的fun()函数有两个形式参数,当调用该函数时需要传递两个实际参数,依次传递给形式参数变量x和y。如fun(-12,78.5)的调用,将-12传递a,78.5传递b,由于a,b在定义函数时的顺序就已经确定了,传递时,也是按顺序依次进行传递。像a,b这样的形式参数称之为位置参数。l调用函数时,位置参数必须按次序传递,如果调用fun()函数时,只给了一个实际参数,如:fun(12)Traceback(m

8、ost recent call last):File,line 1,in fun(12)TypeError:fun()missing 1 required positional argument:b pow(6)Traceback(most recent call last):File,line 1,in pow(6)TypeError:pow()missing 1 required positional argument:n函数参数函数参数函数参数132.默认参数l即在定义函数时,为某些形式参数设置默认值,这类参数称之为默认参数。函数调用时,对于默认参数,如果没有提供实际参数,则使用默认值,

9、如果提供了实际参数,则使用实际参数值。也就是说,在调用函数时,是否为默认参数传递实参是可选的,具有较大的灵活性。带有默认参数的函数定义格式如下:def 函数名(,形参名=默认值,):多行或单行注释 函数体l定义一个函数my_pow(),求xy:def my_pow(x,y=2):求x的y次方 s=1 for i in range(y):s=s*x return s my_pow(3,5)#求35,将3传递给x,5传递给y 243 my_pow(-3)#只提供了一个实参-3,传递给x,形参y使用默认值2,即求(-3)2 9函数参数函数参数函数参数142.默认参数l 通过help()查看Pytho

10、n内置函数print(),结果如下:help(print)Help on built-in function print in module builtins:print(.)print(value,.,sep=,end=n,file=sys.stdout,flush=False)Prints the values to a stream,or to sys.stdout by default.Optional keyword arguments:file:a file-like object(stream);defaults to the current sys.stdout.sep:str

11、ing inserted between values,default a space.end:string appended after the last value,default a newline.flush:whether to forcibly flush the stream.可以看到print()函数有四个默认参数,即”sep=,end=n,file=sys.stdout,flush=False”。sep=表示各输出项目之间用空格分隔,end=n表示一个print()函数输出后,默认回车换行,file=sys.stdout表示默认输出信息输出到标准设备上(一般就是显示器),fl

12、ush表示是否将输出结果立即刷新到file所指的文件里,True表示立即刷新,False表示到关闭file所指的文件时才刷新。“value,.”表示多个输出项。print()函数的功能是将一个或多个value输出到一个数据流文件,默认输出到标准输出设备上(sys.stdout)。默认参数要放在位置参数之后。如下定义函数时,就会出现错误提示:def pow(y=2,x):s=1SyntaxError:non-default argument follows default argument错误的中文意思是:非默认参数跟在默认参数后。函数参数函数参数函数参数153.关键参数l如果一个函数有多个参数

13、,在调用时,如果不想按位置顺序提供实参,那么可以通过按形式参数名来传递参数。这种参数传递方式称为关键参数。对前面定义的fun()、pow()函数采用关键参数调用如下:fun(b=czili.,a=My school is)My school is czili.pow(n=5,x=4)1024采用关键参数进行参数传递,可以不用考虑参数传递的顺序。避免了用户需要牢记参数顺序的麻烦,使得函数调用更加灵活方便。l关键参数是一种参数传递方式函数参数函数参数函数参数164.可变长度参数l 可变长度参数,顾名思义就是传入的参数个数是可变的。Python中可变长度参数有两种形式,分别是*args和*kwds。

14、*args用来接收任意多个实参并将其放在一个元组中,*kwds用来接收类似于显示赋值形式的多个实参并放入字典中。l 定义一个函数,求不定长序列的和,即求:a+b+c+,所求序列的长度是不确定的,为此采用*args这种不定长参数的形式来定义函数如下:def sum(*args):print(type(args)#查看一下args的类型 s=0 for k in args:s=s+k print(s)l sum()函数的调用 sum(1,2,3)#形参args是一个元组 6 sum(-34.5,23,79.8,234)302.3函数参数函数参数函数参数174.可变长度参数(续)l*kwds形式参数

15、的函数定义 def fun(*kwds):print(type(kwds)#查看一下kwds的类型 for key,v in kwds.items():#遍历一下kwds print(key,v)lfun()函数的调用其实就是采用关键字参数的形式进行调用 fun(name=wang,sex=F,age=18)#形式参数保存成字典的类型name wangsex Fage 18函数参数函数参数函数参数185.关于参数传递关于参数传递,需要理解的是值传递还是引用传递。如果实参是不可变对象,则是值传递,如果实参是可变对象,则是引用传递。由于引用传递,在函数内修改引用对象的值时,这个修改也会改变实参引用

16、对象的值。但是如果在函数内又重新创建了对象,并且是形参指向了新的对象,则不会修改实参引用对象的值。通过以下示例来进一步理解引用传递。def fun_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的值也改变了 def fun_2(x):p

17、rint(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”是创建了新的列表对象,所以实参引用对象就不会改变了函数参数函数参数函数参数变量的作用域0420 变量的作用域就是变量起作用的范围,或者说是可以被哪部分程序访问,也可称为命名空间。一个变量在函数内部和外部定义,其作用域不同,如果用特殊关键字定义的变量,其作用域也有相应的规则。Python中根据作用域将变量分为局部变量和全局变量两种。函数参数变量的作用域变量的作用域211.局

18、部变量在函数内部定义的变量(包括形式参数变量),其作用范围只在定义之后,到函数结束为止,这类变量是局部变量。【例3-1】局部变量应用示例。#ch3_1.py#局部变量应用示例import math#定义一个求圆面积的函数def circle(r):print(“circle函数内局部变量r=%.2f%r)s=math.pi*r*r#求面积 r=8#修改函数内变量r的值 print(修改rg,circle函数内局部变量r=%.2f%r)return s#返回所求的面积 r=float(input(请输入圆的半径:)print(“circle函数外全局变量r=%.2f%r)#调用函数求圆的面积ar

19、ea=circle(r)print(“circle函数调用后,全局变量r=%.2f%r)print(半径为%.2f的圆,面积是%.2f%(r,area)print(“在函数外输出circle函数内变量s的值%.2f%(s)【例3-1】运行结果请输入圆的半径:6circle函数外全局变量r=6.00circle函数内局部变量r=6.00修改后,circle函数内局部变量r=8.00circle函数调用后,全局变量r=6.00Traceback(most recent call last):File E:/ding/Python-code/ch3_1.py,line 21,in print(在函数

20、外输出circle()函数内变量s的值%.2f%(s)NameError:name s is not defined请结合运行结果理解局部变量的作用范围函数参数变量的作用域变量的作用域222.全局变量在函数外定义的变量,是全局变量,其作用域是整个程序范围。【例3-2】全局变量的应用示例。#ch3_2.py#write by ding#2018-7-24total=0#定义一个全局变量print(全局变量初始值为:%d%total)def sum(a,b):使用关键字”global”说明全局变量之后,才可以修改其值,否则只能引用其值,不能修改 global totaltotal=a+b sum(

21、25,38)print(全局变量修改后的值为:%d%total)【例3-2】运行结果全局变量初始值为:0全局变量修改后的值为:63在函数内部使用全局变量,如果只是引用其值,则可以直接使用;如果需要修改全局变量的值,则需要使用关键字”global”进行说明之后才能修其值。当局部变量和全局内变量同名时,那么在局部变量作用域内会隐藏全局变量。如【例3-1】的r,在函数circle()内部时,是局部变量r有效。12函数参数变量的作用域变量的作用域异常05异常异常 异常是程序执行过程中的错误,它影响程序的正常执行。如例3-1最后一条语句“print(在函数外输出circle()函数内变量s的值%.2f%

22、(s)”执行时,抛出了一个异常“Traceback(most recent call last):NameError:name s is not defined”,从而使程序的执行终止。对于这样的异常,如果不进行处理,则会终止程序的执行,影响整个系统的运行。因此Python设计了强大的异常处理机制,对程序执行过程中出现的异常进行捕获并处理,使程序能够继续执行下去。2425Python的异常处理能力很强,可以向用户准确反馈出错信息,这主要是依据Python提供的异常类实现的。所有异常都是从异常基类Exception继承而来,并且都已在Exceptions模块中定义好,程序中不需要import E

23、xceptions模块即可使用。常见的Python异常类如下表。序号异常或错误名称功能描述序号异常或错误名称功能描述1BaseException所有异常的基类25MemoryError内存溢出错误(对于Python 解释器不是致命的)2SystemExit解释器请求退出26NameError未声明/初始化对象(没有属性)3KeyboardInterrupt 用户中断执行(通常是输入Ctrl+C)27UnboundLocalError访问未初始化的本地变量4Exception常规错误的基类28ReferenceError弱引用(Weak reference)试图访问已经被垃圾回收了的对象5Sto

24、pIteration迭代器没有更多的值29NotImplementedError尚未实现的方法6GeneratorExit生成器(generator)发生异常来通知退出30SyntaxErrorPython 语法错误7StandardError所有的内建标准异常的基类31IndentationError缩进错误8ArithmeticError所有数值计算错误的基类32TabErrorTab 和空格混用9FloatingPointError 浮点计算错误33SystemError一般的解释器系统错误10OverflowError数值运算超出最大限制34TypeError对类型无效的操作11Zer

25、oDivisionError 除(或取模)零(所有数据类型)35ValueError传入无效的参数12AssertionError断言语句失败36UnicodeErrorUnicode 相关的错误13AttributeError对象没有这个属性37UnicodeDecodeErrorUnicode 解码时的错误14EOFError没有内建输入,到达EOF 标记38UnicodeEncodeErrorUnicode 编码时错误15EnvironmentError 操作系统错误的基类39UnicodeTranslateErrorUnicode 转换时错误16IOError输入/输出操作失败40Wa

26、rning警告的基类17OSError操作系统错误41DeprecationWarning关于被弃用的特征的警告18WindowsError系统调用失败42FutureWarning关于构造将来语义会有改变的警告19ImportError导入模块/对象失败43OverflowWarning旧的关于自动提升为长整型(long)的警告20 KeyboardInterrupt 用户中断执行(通常是输入C)44 PendingDeprecationWarning 关于特性将会被废弃的警告21LookupError无效数据查询的基类45RuntimeWarning可疑的运行时行为(runtime beh

27、avior)的警告22IndexError序列中没有此索引(index)46SyntaxWarning可疑的语法的警告23KeyError映射中没有这个键47UserWarning用户代码生成的警告24RuntimeError一般的运行时错误异常异常26在程序设计中对各种可以预见的异常情况进行处理称为异常处理。合理恰当地使用异常处理可以使程序更加健壮,具有更强的容错性和更好的用户体验,不会因为用户不小心的错误输入或其它原因而造成程序运行终止。Python中异常处理是通过一些特殊的结构语句实现的,主要有以下几种结构形式。ltryexcept结构try:#此处放置可能引起异常的语句except E

28、xception as reason:#如果try中代码块不能正常执行,则执行此处代码块进行异常处理【例3-3】tryexcept应用示例。#ch3_3.py#tryexcept应用示例 def div(x,y):try:z=x/y return z except ZeroDivisionError:print(程序出现异常,异常类型为:除数为0)print(div(5,0)程序运行结果:程序出现异常,异常类型为:除数为0改写后,抛出异常,给出提示后,可以再次输入异常异常#ch3_3_1.py#tryexcept应用示例 def div(x,y):try:z=x/y return z exce

29、pt ZeroDivisionError:print(出现了以0为除数的异常)#提示出现了异常 y=float(input(请输入一个非0的值:)#要求重新提供一个非0的值 z=x/y return zprint(div(5,0)修改后,程序执行结果为:出现了以0为除数的异常请输入一个非0的值:31.666666666666666727ltryexceptelse结构try:#可能引发异常的代码块except Exception as reason:#此语句也可直接写成except:#用来处理异常的代码块else:#如果try中的代码没有引发异常,则在执行完try中的代码后,继续执行此处代码块

30、【例3-4】tryexceptelse应用示例#ch3_4.py#tryexceptelse应用示例 def div(x,y):try:z=x/y except ZeroDivisionError:print(出现了以0为除数的异常)#提示出现了异常 y=float(input(请输入一个非0的值:)#要求重新提供一个非0的值 z=x/y return z else:return zprint(div(5,0)程序执行结果为:出现了以0为除数的异常请输入一个非0的值:31.6666666666666667因为div(5,0)调用时,抛出了异常,所以执行except代码块,要求重新输入一个值,并

31、进行计算。如果改用div(5,7)调用,则不会抛出异常,所以执行else子句的代码块,结果为:0.7142857142857143异常异常28l带有多个except的try结构try:try块#可能引发异常的代码块except Exception1:#Exception1是可能出现的一种异常 except块1#处理Exception1异常的语句except Exception2:#Exception2是可能出现的另种异常 except块2#处理Exception2异常的语句else:#可以没有else子句块#如果有else子句块,则在Exception1和Exception2异常都未出现时,执

32、行此处代码块【例3-5】多个except应用示例#ch3_5.py#tryexceptelse应用示例def div(x,y):try:z=x/y except ZeroDivisionError:print(出现了以0为除数的异常!)#提示出现了异常 except TypeError:#类型错误异常 print(被除数和除数应为数值类型!)else:return zprint(div(5,b)程序执行结果为:被除数和除数应为数值类型!None这种结构可以处理多种异常处理两种异常异常异常29ltry.except.finally结构try:#可能引发异常的代码块except Exception

33、 as reason:#此语句也可直接写成except:#用来处理异常的代码块finally#无论异常是否发生此处代码块都会执行 try:1/0 except:print(发生了异常,在except字句块中进行了异常处理!)finally:print(finally子句中的内容无论是否发生异常总会被执行!)发生了异常,在except字句块中进行了异常处理!finally子句中的内容无论是否发生异常总会被执行!def div(x,y):try:print(x/y)except ZeroDivisionError:print(除0错误!)except TypeError:print(类型错误!)e

34、xcept NameError:print(名字错误!)else:print(正确!)finally:print(执行finally 语句块!)可以使用多个except子句 div(1,0)除0错误!执行finally 语句块!div(a,1)类型错误!执行finally 语句块!div(10,5)2正确!执行finally 语句块!异常异常项目训练哥德巴赫狂想06 通过编程验证哥德巴赫狂想,掌握函数的定义方法、调用和参数传递,会根据用户需求进行模块划分,并编写函数来实现各模块。任何大于2的偶数总可以分解成两个素数的和训练目标训练内容 众所周知,哥德巴赫狂想的证明是一个世界性的数学难题,至今未

35、能完全解决。我国著名数学家陈景润为哥德巴赫狂想的证明作出过杰出贡献。所谓哥德巴赫狂想是说任何一个大于2的偶数都能表示成为两个素数之和。应用计算机工具可以快速地在一定范围内验证哥德巴赫狂想的正确性,也就是近似证明哥德巴赫狂想。训练步骤 编写程序#ch3_p_1.py#验证哥德巴赫狂想#素数判定函数def judge_prime(n):for i in range(2,n):if n%i=0:return False break else:return True def main():s=int(input(请输入范围的起始值:)e=int(input(请输入范围的终止值:)if s%2=0:fo

36、r j in range(s,e+1,2):#s是偶数,则从s开始判断 for k in range(2,int(j/2)+1):#对每个偶数进行分解 if judge_prime(k)and judge_prime(j-k):print(%d=%d+%d%(j,k,j-k)break else:for j in range(s+1,e+1,2):#s是奇数,则从s+1开始判断 for k in range(2,int(j/2)+1):#对每个偶数进行分解 if judge_prime(k)and judge_prime(j-k):print(%d=%d+%d%(j,k,j-k)break i

37、f _name_=_main_:main()功能分析验证一定范围内的哥德巴赫狂想,就是通过程序将一定范围内的所有偶数都分解成两个素数之和,从而说明其正确性。因此判定任意一个数是不是素数,可用一个函数来实现(素数的判断,见例2-10),然后通过循环对每个偶数进行分解。任何大于2的偶数总可以分解成两个素数的和训练步骤调试程序此例代码的调试比较简单,任意输入一个正的数据范围即可。如:328,612393。对于此例的代码,需要注意的是:起始循环值要确保是偶数;“for k in range(2,int(j/2)+1)”中“int(j/2)+1”加1,主要是防止漏掉4,6;Python中main()可以

38、理解为一个测试函数,当单独运行上述程序时,才会执行main()函数的代码。请填写表1-1 的项目训练小结。训练小结任何大于2的偶数总可以分解成两个素数的和小结071.函数是用来实现代码复用的一种方法。2.函数定义的关键字是def。3.Lambda表达式。4.函数定义开头部分用一对三引号括起来的内容,通常说明函数的功能、参数等,将会保存到函数的文档中,即_doc_属性中。5.Python函数的参数不需要指定类型。6.函数的调用需要注意是值的传递还是可变序列引用传递,如果是可变序列引用传递,在函数内部如果对可变序列进行了修改,则修改后的结果可以反映到函数外,即改变了实参。7.函数的参数分为位置参数

39、、默认参数和可变长度参数。关键参数是一种参数传递方式。默认参数要求放置在位置参数之后。8.函数的返回值由return语句返回,如果没有返回值,则默认返回None。9.变量分为局部变量和全局变量,分别有不同的作用范围。当全局变量和局部变量同名时,在局部变量有效时,则全局变量被隐藏。在函数内部要改变全局变量的值,需要使用global关键字来声明。尽量不要使用全局变量。10.异常的发生,影响了程序的正常执行。当Python检测到一个错误时,解释器就会指出当前程序流程已无法继续执行下去,这时候就会抛出异常。Python内置多种异常类型。11.异常处理的意义在于,正确合理使用异常处理可以使程序具备较强的容错能力,即使在遇到各种错误和异常的情况下,也能做出恰当的处理,在一定程度上提高了Python程序的健壮性和友好性。12.Python中处理异常的结构有tryexcept、tryexceptelse、多个except的try、try.except.finally等。小结35THANKS!36

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(Python基础与大数据应用第三章-函数课件.pptx)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|