ppt3_python函数及代码复用(PPT91页)

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

函数的定义微实例:生日歌。过生日时要为朋友唱生日歌,歌词为:Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dear名字Happybirthdaytoyou!编写程序为Mike和Lily输出生日歌。最简单的实现方法是重复使用print()语句函数的基本使用函数的定义•函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名进行完成功能调用。•函数也可以看作是一段具有名字的子程序,可以在需要的地方调用执行,不需要在每个执行地方重复编写这些语句。•每次使用函数可以提供不同的参数作为输入,以实现对不同数据的处理;函数执行后,还可以反馈相应的处理结果。函数是一种功能抽象函数的定义Python定义一个函数使用def保留字,语法形式如下:def函数名(参数列表):'''注释'''函数体return返回值列表函数的定义1234print(Happybirthdaytoyou!)print(Happybirthdaytoyou!)print(Happybirthday,dearMike!)print(Happybirthdaytoyou!)最简单的实现方法是重复使用print()语句,如下:函数的定义微实例5.1m5.1HappyBirthday.py12345678910defhappy():print(Happybirthdaytoyou!)defhappyB(name):happy()happy()print(Happybirthday,dear{}!.format(name))happy()happyB(Mike)print()happyB(Lily)Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dearMike!Happybirthdaytoyou!Happybirthdaytoyou!Happybirthdaytoyou!Happybirthday,dearLily!Happybirthdaytoyou!函数调用的过程程序调用一个函数需要执行以下四个步骤:(1)调用程序在调用处暂停执行;(2)在调用时将实参复制给函数的形参;(3)执行函数体语句;(4)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。函数调用的过程微实例5.1中happyB()的被调用过程函数调用的过程函数调用的过程lambda函数Python的有33个保留字,其中一个是lambda,该保留字用于定义一种特殊的函数——匿名函数,又称lambda函数。匿名函数并非没有名字,而是将函数名作为函数结果返回,如下:函数名=lambda参数列表:表达式lambda函数与正常函数一样,等价于下面形式:def函数名(参数列表):return表达式lambda函数简单说,lambda函数用于定义简单的、能够在一行内表示的函数,实例如下。f=lambdax,y:x+ytype(f)class'function'f(10,12)22函数的参数传递可选参数和可变数量参数在定义函数时,有些参数可以存在默认值。默认值参数必须出现在函数参数列表的最右端,且任何一个默认值参数右边不能有非默认值参数。defdup(str,times=2):print(str*times)dup(knock~)knock~knock~dup(knock~,4)knock~knock~knock~knock~可选参数和可变数量参数在函数定义时,可以设计可变数量参数,通过参数前增加星号(*)实现defvfunc(a,*b):print(type(b))forninb:a+=nreturnavfunc(1,2,3,4,5)class'tuple'15参数的位置和名称传递Python提供了按照形参名称输入实参的方式,调用如下:result=func(x2=4,y2=5,z2=6,x1=1,y1=2,z1=3)由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。变量的返回值•return语句用来退出函数并将程序返回到函数被调用的位置继续执行。•return语句同时可以将0个、1个或多个函数运算完的结果返回给函数被调用处的变量,例如。deffunc(a,b):returna*bs=func(knock~,2)print(s)knock~knock~变量的返回值函数可以没有return,此时函数并不返回值,如微实例5.1的happy()函数。函数也可以用return返回多个值,多个值以元组类型保存,例如。deffunc(a,b):returnb,as=func(knock~,2)print(s,type(s))(2,'knock~')class'tuple'函数对变量的作用一个程序中的变量包括两类:全局变量和局部变量。•全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。•局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。变量的返回值deffunc(a,b):c=a*b#c是局部变量,a和b作为函数参数也是局部变量returncs=func(knock~,2)print(c)Traceback(mostrecentcalllast):Filepyshell#6,line1,inmoduleprint(c)NameError:name'c'isnotdefined这个例子说明,当函数执行完退出后,其内部变量将被释放。如果函数内部使用了全局变量呢?变量的返回值n=1#n是全局变量deffunc(a,b):n=b#这个n是在函数内存中新生成的局部变量,不是全局变量returna*bs=func(knock~,2)print(s,n)#测试一下n值是否改变knock~knock~1•函数func()内部使用了变量n,并且将变量参数b赋值给变量n,为何全局变量n值没有改变?变量的返回值如果希望让func()函数将n当作全局变量,需要在变量n使用前显式声明该变量为全局变量,代码如下。n=1#n是全局变量deffunc(a,b):globalnn=b#将局部变量b赋值给全局变量nreturna*bs=func(knock~,2)print(s,n)#测试一下n值是否改变knock~knock~2变量的返回值如果此时的全局变量不是整数n,而是列表类型ls,会怎么样呢?理解如下代码。ls=[]#ls是全局列表变量deffunc(a,b):ls.append(b)#将局部变量b增加到全局列表变量ls中returna*bs=func(knock~,2)print(s,ls)#测试一下ls值是否改变knock~knock~[2]变量的返回值如果func()函数内部存在一个真实创建过且名称为ls的列表,则func()将操作该列表而不会修改全局变量,例子如下。ls=[]#ls是全局列表变量deffunc(a,b):ls=[]#创建了名称为ls的局部列表变量列ls.append(b)#将局部变量b增加到全局列表变量ls中returna*bs=func(knock~,3)print(s,ls)#测试一下ls值是否改变knock~knock~[]变量的返回值Python函数对变量的作用遵守如下原则:•对于简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放;•简单数据类型变量在用global保留字声明后,作为全局变量;•对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部可直接使用并修改全局变量的值;•如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作。案例精选例:编写函数模拟猜数游戏。系统随机产生一个数,玩家最多可以猜5次,系统会根据玩家的猜测进行提示,玩家则可以根据系统的提示对下一次的猜测进行适当调整。案例精选fromrandomimportrandintdefguess(maxValue=100,maxTimes=5):value=randint(1,maxValue)#随机生成一个整数foriinrange(maxTimes):prompt='StarttoGUESS:'ifi==0else'Guessagain:'#使用异常处理结构,防止输入不是数字的情况try:x=int(input(prompt))except:print('Mustinputanintegerbetween1and',maxValue)else:ifx==value:#猜对了print('Congratulations!')breakelifxvalue:print('Toobig')else:print('Toolittle')else:#次数用完还没猜对,游戏结束,提示正确答案print('Gameover.FAIL.')print('Thevalueis',value)小练习:使用turtle绘制阴阳图形datetime库的使用datetime库概述以不同格式显示日期和时间是程序中最常用到的功能。Python提供了一个处理时间的标准函数库datetime,它提供了一系列由简单到复杂的时间处理方法。datetime库可以从系统中获得时间,并以用户选择的格式输出。datetime库概述datetime库以类的方式提供多种日期和时间表达方式:类datetime.date:可以表示年、月、日等类datetime.time:可以表示小时、分钟、秒、毫秒等类datetime.datetime:日期和时间表示的类,其很多功能覆盖date和time类类datetime.timedelta:时间间隔有关的类类datetime.tzinfo:与时区有关的信息表示类datetime库解析使用datetime.now()获得当前日期和时间对象,使用方法如下:fromdatetimeimportdatetimedatetime.now()作用:返回一个datetime类型,表示当前的日期和时间,精确到微秒。fromdatetimeimportdatetimetoday=datetime.now()todaydatetime.datetime(2016,9,20,10,29,43,928549)datetime库解析使用datetime.utcnow()获得当前日期和时间对应的UTC(世界标准时间)时间对象,使用方法如下:datetime.utcnow()作用:返回datetime类型,表示当前日期和时间的UTC表示,精确到微秒。today=datetime.utcnow()todaydatetime.datetime(2016,9,20,2,35,1,427954)datetime库解析datetime.now()和datetime.utcnow()都返回一个datetime类型的对象,也可以直接使用datetime()构造一个日期和时间对象,使用方法如下:datetime(year,month,day,hour=0,minute=0,second=0,microsecond=0)作用:返回一个datetime类型,表示指定的日期和时间,可以精确到微秒。datetime库解析调用datetime()函数直接创建一个datetime对象,表示2016年9月16日22:33,32秒7微秒,执行结果如下:someday=datetime(2016,9,16,22,33,32,7)somedaydatetime.datetime(2016,

1 / 91
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功