Python电子教案51函数和代码复用1

上传人:kfc****89 文档编号:243352336 上传时间:2024-09-21 格式:PPT 页数:73 大小:454.50KB
返回 下载 相关 举报
Python电子教案51函数和代码复用1_第1页
第1页 / 共73页
Python电子教案51函数和代码复用1_第2页
第2页 / 共73页
Python电子教案51函数和代码复用1_第3页
第3页 / 共73页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,Python电子教案5-1-函数和代码复用,Python电子教案5-1-函数和代码复用Python电子教案5-1-函数和代码复用第5节 函数和代码的复用,第,5,节,函数和代码的复用,函数的基本使用,函数?,是什么,做什么,怎么做,函数的定义,函数是一段具有特定功能的、可重用的语句组,用函数名来表示并通过函数名,进行,完成功能调用。,函数也可以看作,是,一段具有名字的子程序,可以在需要的地方调用执行,不需要在每个执行地方重复编写这些语句。每次使用函数可以提供不同,的,参数作为输入,以实现对不同数据的处理;函数执行后,,还,可以反馈相应的,处理,结果。,函数是一种功能抽象,函数的定义,Python,定义一个函数使用,def,保留字,语法形式如下:,def ():,return ,函数的定义,微实例:生日歌。,过生日时要为朋友唱生日歌,歌词为:,Happy birthday to you!,Happy birthday to you!,Happy birthday, dear ,Happy birthday to you!,编写程序为,Mike,和,Lily,输出生日歌。最简单的实现方法是重复使用,print(),语句,函数的定义,最简单的实现方法是重复使用,print(),语句,如下:,函数的定义,函数调用的过程,程序调用一个函数需要执行以下四个步骤:,(,1,)调用程序在调用处暂停执行;,(,2,)在调用时将实参复制给函数的形参;,(,3,)执行函数体语句;,(,4,)函数调用结束给出返回值,程序回到调用前的暂停处继续执行。,函数调用的过程,微实例中,happyB(),的被调用过程,函数调用的过程,函数调用的过程,函数的参数传递,可选参数和可变数量参数,在定义函数时,有些参数,可以,存在默认值,可选参数和可变数量参数,在函数定义时,可以设计可变数量参数,通过参数前增加星号(,*,)实现,参数的位置和名称传递,Python,提供了按照形参名称输入实参的方式,调用如下:,result = func(x2=4, y2=5, z2=6, x1=1, y1=2, z1=3),由于调用函数时指定了参数名称,所以参数之间的顺序可以任意调整。,变量的返回值,return语句用来退出函数并将程序返回到函数被调用的位置继续执行。,return语句同时可以将0个、1个或多个函数运算,完,的结果返回给函数被调用处的变量,例如。,变量的返回值,函数可以没有,return,,此时函数并不返回值,如微实例的,happy(),函数。函数也可以用,return,返回多个值,多个值以元组类型保存,例如。,函数对变量的作用,一个程序中的变量包括两类:全局变量和局部变量。,全局变量指在函数之外定义的变量,一般没有缩进,在程序执行全过程有效。,局部变量指在函数内部使用的变量,仅在函数内部有效,当函数退出时变量将不存在。,变量的返回值,这个例子说明,当函数执行完退出后,其内部变量将被释放。如果函数内部使用了全局变量呢?,变量的返回值,函数func()内部使用了变量n,并且将变量参数b赋值给变量n,为何,全局变量n,值没有改变?,变量的返回值,如果希望让,func(),函数将,n,当作全局变量,需要在变量,n,使用前显式声明该变量为全局变量,代码如下。,变量的返回值,如果此时的全局变量不是整数,n,,而是列表类型,ls,,会怎么样呢?理解如下代码。,变量的返回值,如果,func(),函数内部存在一个真实创建过且名称为,ls,的列表,则,func(),将操作该列表而不会修改全局变量,例子如下。,变量的返回值,Python函数对变量的作用遵守如下原则:,简单数据类型变量无论是否与全局变量重名,仅在函数内部创建和使用,函数退出后变量被释放;,简单数据类型变量在用,global,保留字声明后,作为全局变量;,对于组合数据类型的全局变量,如果在函数内部没有被真实创建,的,同名变量,则函数内部可直接使用并修改全局变量的值;,如果函数内部真实创建了组合数据类型变量,无论是否有同名全局变量,函数仅对局部变量进行操作。,lambda,函数,Python的,有33,个保留字,其中一个是,lambda,,该保留字用于定义一种特殊的函数,匿名函数,又称,lambda,函数。,匿名函数并非没有名字,而是将函数名作为函数结果返回,如下:, = lambda : ,lambda,函数与正常函数一样,等价于下面形式:,def ():,return ,lambda,函数,简单说,,lambda,函数用于定义简单的、能够在一行内表示的函数,返回一个函数类型,实例如下。,datetime,库的使用,datetime,库概述,以不同格式显示日期和时间是程序中最常用到的功能。,Python,提供了一个处理时间的标准函数库,datetime,,它提供了一系列由简单到复杂的时间处理方法。,datetime,库可以从系统中获得时间,并以用户选择的格式输出。,datetime,库概述,datetime,库以类的方式提供多种日期和时间表达方式:,:日期表示类,可以表示年、月、日等,:时间表示类,可以表示小时、分钟、秒、毫秒等,:日期和时间表示的类,功能覆盖,date,和,time,类,:时间间隔有关的类,:与时区有关的信息表示类,datetime,库,解析,使用,datetime.now(),获得当前日期和时间对象,使用方法如下:,(),作用,:返回一个,datetime,类型,表示当前的日期和时间,精确到微秒。,datetime,库,解析,使用,datetime.utcnow(),获得当前日期和时间对应的,UTC,(世界标准时间)时间对象,使用方法如下:,(),作用,:返回,datetime,类型,表示当前日期和时间的,UTC,表示,精确到微秒。,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,微秒,执行结果如下:,程序已经有了一个,datetime,对象,进一步可以利用这个对象的属性显示时间,为了区别,datetime,库名,采用上例中的,someday,代替生成的,datetime,对象,datetime,库,解析,datetime,库,解析,datetime,对象有,3,个常用的时间格式化方法,如表所示,isoformat(),和,isoweekday(),方法的使用如下:,datetime,库,解析,strftime(),方法是时间格式化最有效的方法,几乎可以以任何通用格式输出,时间,datetime,库,解析,datetime,库,解析,strftime(),格式化字符串的数字左侧会自动补零,上述格式也可以与,print(),的格式化函数一起使用,七段数码管绘制,七段数码管绘制,七段数码管(,seven-segment indicator,)由,7,段数码管拼接而成,每段有亮或不亮两种情况,改进型的七段数码管还包括一个小数点位置,如图,所示,。,七段数码管绘制,七段数码管能形成,2,7,=128,种不同状态,其中部分状态能够显示易于人们理解的数字或字母含义,因此被广泛使用。图给出了十六进制中,16,个字符的七段数码管表示。,七段数码管绘制,每个,0,到,9,的数字都有相同的七段数码管样式,因此,可以通过设计函数复用数字的绘制过程。进一步,每个七段数码管包括,7,个数码管样式,除了数码管位置不同外,绘制风格一致,也可以通过函数复用单个数码段的绘制过程。,七段数码管绘制,实例代码,7.1,e7.1,Draw,SevenSegDisplay.py,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,#e7.1,Draw,SevenSegDisplay.py,import turtle, datetime,def drawLine(draw): #,绘制单段数码管,turtle.pendown() if draw else turtle.penup(),turtle.fd(40),turtle.right(90),def drawDigit(d): #,根据数字绘制七段数码管,drawLine(True) if d in 2,3,4,5,6,8,9 else drawLine(False),drawLine(True),if d in 0,1,3,4,5,6,7,8,9 else drawLine(False),drawLine(True) if d in 0,2,3,5,6,8,9 else drawLine(False),drawLine(True) if d in 0,2,6,8 else drawLine(False),turtle.left(90),drawLine(True) if d in 0,4,5,6,8,9 else drawLine(False),drawLine(True) if d in 0,2,3,5,6,7,8,9 else drawLine(False),drawLine(True) if d in 0,1,2,3,4,7,8,9 else drawLine(False),七段数码管绘制,七段数码管绘制,实例代码定义了,drawDigit(),函数,该函数根据输入的数字,d,绘制七段数码管,结合七段数码管结构,每个数码管的绘制采用图所示顺序。,七段数码管绘制,绘制起点在数码管中部左侧,无论每段数码管是否被绘制出来,,turtle,画笔都按顺序“画完”所有,7,个数码管。对于给定数字,d,,哪个数码段被绘制出来采用,ifelse,语句判断。,七段数码管绘制,七段数码管绘制,七段数码管绘制,七段数码管绘制,代码的复用和模块化设计,代码的复用和模块化设计,函数是程序的一种基本抽象方式,它将一系列代码组织起来通过命名供其他程序使用。函数封装的直接好处是代码复用,任何其他代码只要输入参数即可调用函数,从而避免相同功能代码在被调用处重复编写。代码复用产生了另一个好处,当更新函数功能时,所有被调用处的功能都被更新。,代码的复用和模块化设计,当程序的长度在百行以上,如果不划分模块,就算是最好的程序员也很难理解程序含义,程序的可读性就已经很糟糕了,。解决这一问题的最好方法是将一个程序分割成短小的程序段,每一段程序完成一个小的功能。无论面向过程和面向对象编程,对程序合理划分功能模块并基于模块设计程序是一种常用方法,被称为“模块化设计”。,代码的复用和模块化设计,模块化设计一般有两个基本要求:,紧耦合:尽可能合理划分功能块,功能块内部耦合紧密;,松耦合:模块间关系尽可能简单,功能块之间耦合度低。,使用函数只是模块化设计的必要非充分条件,根据计算需求合理划分函数十分重要。一般来说,完成特定功能或被经常复用的一组语句应该采用函数来封装,并尽可能减少函数间参数和返回值的数量。,函数的递归,递归的定义,函数作为一种代码封装,可以被其他程序调用,当然,也可以被函数内部代码调用。这种函数定义中调用函数自身的方式称为递归。就像一个人站在装满镜子的房间中,看到的影像就是递归的结果。递归在数学和计算机应用上非常强大,能够非常简洁的解决重要问题。,递归的定义,数学上有个经典的递归例子叫阶乘,阶乘通常定义为:,这个关系给出了另一种,方式,表达阶乘的方式:,递归的定义,阶乘的例子揭示了递归的,2,个关键特征:,(,1,)存在一个或多个基例,基例不需要再次递归,它是确定的表达式;,(,2,)所有递归链要以一个或多个基例结尾。,递归的使用方法,微实例5.21:阶乘的计算,。,根据用户输入的整数,n,,计算并输出,n,的阶乘值。,递归的使用方法,递归的使用方法,微实例5.32:字符串反转,。,对于用户输入的字符串,s,,输出反转后的字符串。,解决这个问题的基本思想是把字符串看作一个递归对象。,递归的使用方法,观察这个函数的工作过程。,s0,是首字符,,s1:,是剩余字符串,将它们反向连接,可以得到反转字符串。执行这个程序,结果如下,科赫曲线绘制,科赫曲线绘制,自然界有很多图形很规则,符合一定的数学规律,例如,蜜蜂蜂窝是天然的等边六角形等。科赫,(Koch),曲线在众多经典数学曲线中非常著名,由瑞典数学家冯科赫,(H,V,Koch),于,1904,年提出,由于其形状类似雪花,也被称为雪花曲线。,科赫曲线绘制,科赫曲线的基本概念和绘制方法如下:,正整数,n,代表科赫曲线的阶数,表示生成科赫曲线过程的操作次数。科赫曲线初始化阶数为,0,,表示一个长度为,L,的直线。对于直线,L,,将其等分为三段,中间一段用边长为,L/3,的等边三角形的两个边替代,得到,1,阶科赫曲线,它包含四条线段。进一步对每条线段重复同样的操作后得到,2,阶科赫曲线。继续重复同样的操作,n,次可以得到,n,阶科赫曲线。,科赫曲线绘制,科赫曲线绘制,科赫曲线属于分形几何分支,它的绘制过程体现了递归思想,绘制过程代码。,科赫曲线绘制,科赫曲线的雪花效果,Python,内置函数,Python,内置函数,Python,解释器提供了,68,个内置函数,,,其中,前,36,个已经,将结果,需要,掌握。,汇报结束,谢谢大家,!,请各位批评指正,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 中学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!