Python程序设计案例教程第2版第6章函数和代码复用_第1页
Python程序设计案例教程第2版第6章函数和代码复用_第2页
Python程序设计案例教程第2版第6章函数和代码复用_第3页
Python程序设计案例教程第2版第6章函数和代码复用_第4页
Python程序设计案例教程第2版第6章函数和代码复用_第5页
已阅读5页,还剩68页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SSM框架应用于沈工高职考试系统的设计与实践第6章 函数和代码复用函数的概念6.16.1函数的概念函数定义:函数是实现某一特定功能的语句集合。函数作用:函数可以重复使用,从而提高了代码的可重用性;函数通常实现较为单一的功能,从而提高了程序的独立性;同一个函数,通过接收不同的参数,实现不同的功能,从而提高了程序的适应性。函数分类:内置函数,它们由Python内置函数库提供,如print()、input()、int()等函数;自定义函数,它们是由用户根据需求定义的具有特定功能的一段代码。函数的定义和调用6.21函数的定义6.2.1函数的定义函数是具有特定功能、可重复使用的语句组函数主要作用提高代码复用性可缩短代码长度,降低编程难度6.2.1函数的定义函数是一段代码的表示def<函数名>(<参数(0个或多个)>): <函数体>

return<返回值>函数是一段代码的表示例:计算n!deffact(n):s=1foriinrange(1,n+1): s*=i

returns函数名参数返回值6.2.1函数的定义函数定义时,所指定的参数是一种占位符函数定义后,如果不经过调用,不会被执行y=f(x)

函数定义时,参数是输入、函数体是处理、结果是输出(IPO模式)6.2.1函数的定义调用是运行函数代码的方式deffact(n):函数的定义s=1foriinrange(1,n+1): s*=i

returnsa=fact(10)函数的调用调用时要给出实际参数实际参数替换定义中的参数函数调用后得到返回值6.2.2函数的调用函数的调用过程形式参数实际参数6.2.2函数的调用函数的参数6.33可选参数1参数分类2参数个数4可变参数6.3函数的参数defsum(a,b):ret=a+bprint(ret)函数调用:sum(2,3)位置参数传递参数可以分为位置参数和关键字参数

definfo(name,age,sex):print("姓名:",name)print("年龄:",age)print("性别:",sex)函数调用:info(age=18,name="张三",sex="男")参数分类1例:定义一个计算两个数之和的函数sum(),具体代码如下:defsum(a,b):ret=a+bprint(ret)按位置传递函数调用时,参数可以按照位置或名称方式传递按名称传递6.3函数的参数参数分类1调用函数:sum(2,3)sum(b=3,a=2)defsum(a,b):ret=a+bprint(ret)函数可以有参数,也可以没有,但必须保留括号deffact():print("我也是函数")6.3函数的参数参数个数2可选参数(默认参数)3非可选参数一般位于可选参数前面,格式如下:函数定义时可以为某些参数指定默认值,构成可选参数def<函数名>(<非可选参数>,<可选参数>): <函数体>

return<返回值>6.3函数的参数可选参数未传值,则直接使用参数的默认值;可选参数传值,则实际参数的值会覆盖默认值。definfo(name,sex,age=20):print("姓名:",name)print("年龄:",age)print("性别:",sex)通过以下两种方式调用info()函数:info(name="张三",sex="男")info(name="张三",sex="男",age=18)姓名:张三年龄:20性别:男姓名:张三年龄:18性别:男6.3函数的参数可选参数(默认参数)-例3函数中的参数的个数不确定时,可以使用可变参数(不定长参数)。包含可变参数的函数的语法格式如下:def<函数名>(<参数>,*b):<函数体>

return<返回值>*b:不定长参数,用于接收不定数量的参数,调用函数时传入的所有参数被b接收后以元组形式保存。6.3函数的参数可变参数(不定长参数)4以定义一个多数值加法器函数为例,具体代码如下:defcalsum(*args):total=0forparaminargs:total+=param

returntotalprint("2个参数:3+2=%d"%calsum(3,2))print("3个参数:4+8+10=%d"%calsum(4,8,10))print("4个参数:4+5+6+7=%d"%calsum(4,5,6,7))2个参数:3+2=53个参数:4+8+10=224个参数:4+5+6+7=226.3函数的参数可变参数(不定长参数)-例14调用函数时传入“不定数量的关键字参数”的所有参数被**b接收后以字典形式保存。{'语文':100,'数学':95,'英语':76}defscore(**b):print(b)score(语文=100,数学=95,英语=76)6.3函数的参数可变参数(不定长参数)-例24变量的作用域6.4局部变量和全局变量<语句块1>def

<函数名>(<参数>)<函数体>

return

<返回值><语句块2>程序全局变量函数局部变量6.4变量的作用域n,s=10,100deffact(n): s=1 foriinrange(1,n+1): s*=i returnsprint(fact(n),s)n和s是全局变量n和s是局部变量运行结果:3628800100s值:

3628800s值:

1006.4变量的作用域局部变量和全局变量–例:计算s*n!局部变量是函数内部的占位符,与全局变量可能重名但不同函数运算结束后,局部变量被释放可以使用global保留字在函数内部使用全局变量规则1:局部变量和全局变量是不同变量6.4变量的作用域局部变量和全局变量n,s=10,100deffact(n): globals foriinrange(1,n+1): s*=i returnsprint(fact(n),s)fact()函数中使用global保留字声明此处s是全局变量s运行结果:362880000362880000此处s全局变量被函数修改

6.4变量的作用域局部变量和全局变量–案例:计算s*n!规则2:局部变量为组合数据类型且未创建,等同于全局变量ls=["F","f"]deffunc(a): ls.append(a)

returnlsfunc("C")print(ls)通过使用[]真实创建了一个全局变量列表ls运行结果:['F','f','C']全局变量ls被修改

此处ls是列表类型,未真实创建则等同于全局变量6.4变量的作用域局部变量和全局变量函数的特殊形式6.53高阶函数1匿名函数2递归函数lambda函数是一种匿名函数,即没有名字的函数使用lambda保留字定义,函数名是返回结果lambda函数用于定义简单的、能够在一行内表示的函数lambda函数返回函数名作为结果6.5.1匿名函数<函数名>=lambda<参数>:<表达式>lambda函数返回函数名作为结果等价于def<函数名>(<参数>) <函数体>

return<返回值>6.5.1匿名函数例:>>>f=lambdax,y:x+y>>>f(10,15)25>>>f=lambda:"lambda函数">>>print(f())lambda函数6.5.1匿名函数如果一个函数在内部调用函数本身,这个函数就是递归函数。 1n=1n!= n(n-1)!否则递归的两个关键特征基例:子问题的最小规模,用于确定递归何时终止,也称为递归出口。递归体:包括一个或多个对自身函数的调用。6.5.2递归函数例:请输入一个正整数:55!=120deffact(n):ifn==1:#基例

return1else:

return

n*fact(n-1)#递归体number=int(input("请输入一个正整数:"))print("%d!="%number,fact(number))6.5.2递归函数递归函数调用过程6.5.2递归函数高阶函数定义6.5.3高阶函数Python中的函数可以被当作变量一样进行操作,包括作为参数传递给其他函数,或者作为返回值从函数中返回,这种能够处理函数的函数就称为高阶函数。简而言之,高阶函数就是能够接受函数作为参数或者返回函数的函数。6.5.3高阶函数map()函数map()函数有2个参数,一个参数是函数f(),另一个参数是列表list,并通过把函数f()依次作用在list的每个元素上,得到一个新的list作为map()函数的返回结果。1list1=[1,2,3,4,5,6,7,8]2list2=map(lambdax:x**2,list1)#利用匿名函数3foreinlist2:4print(e,end="")14916253649646.5.3高阶函数filter()函数filter()函数接收一个函数f()和一个list,它的作用是对每个元素进行判断,返回True或False,filter()函数根据判断结果自动过滤不符合条件的元素,返回由符合条件的元素组成的新的list。#用列表推导式,创建一个包含1-100的列表list1=[foriinrange(1,101)]#表达式成立就会返回数据,只要不是0都会返回Trueret=filter(lambdaa:a%2!=0,list1)print("1-100的奇数为:",list(ret))1-100的奇数为:[1,3,5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35,37,39,41,43,45,47,49,51,53,55,57,59,61,63,65,67,69,71,73,75,77,79,81,83,85,87,89,91,93,95,97,99]6.5.3高阶函数reduce()函数reduce()函数接收一个函数f()和一个list,函数f()必须接收两个参数,函数对列表list的每个元素反复调用函数f(),并返回最终结果值。#导入functools模块下的部件reducefromfunctoolsimportreducelist1=[iforiinrange(1,101)]#reduce函数对该列表中的元素进行运算ret=reduce(lambdaa,b:a+b,list1)#最后处理计算的结果print("和为:“,ret)和为:50506.5.3高阶函数sorted()函数sorted()函数也是一个高阶函数,函数详细定义如下:sorted(list,key=None,reverse=False)参数key可以接收一个函数(仅有一个参数)来实现自定义排序,key指定的函数将作用于list的每一个元素上,并根据key函数返回的结果进行排序,默认值为None。参数reverse是一个布尔值。如果设置为True,列表元素将被倒序排列,默认值为False。list1=[25,11,-15,8,-22,-5]print(sorted(list1,key=abs))students=[('张三',A',19),('李四','B',21),(王五',B,17)]print(sorted(students,key=lambdas:s[2]))print(sorted(students,keylambdas:s[2],reverseTrue))6.5.3高阶函数sorted()函数sorted()函数也是一个高阶函数,函数详细定义如下:sorted(list,key=None,reverse=False)list1=[25,11,-15,8,-22,-5]print(sorted(list1,key=abs))students=[('张三',A',19),('李四','B',21),(王五',B,17)]print(sorted(students,key=lambdas:s[2]))print(sorted(students,keylambdas:s[2],reverseTrue))[-5,8,11,-15,-22,25][('王五','B',17),('张三','A',19),('李四','B',21)][('李四','B',21),('张三','A',19),('王五','B',17)]6.5.3高阶函数zip()函数zip()函数以一系列列表作为参数,将列表中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。a=[1,2,3]b=[4,5,6]zipped=zip(a,b)foreinzipped:print(e)(1,4)(2,5)(3,6)6.5.3高阶函数enumerate()函数enumerate()函数用来将一个可迭代对象转化为枚举对象,使用它可以同时获得每个元素的索引下标和值,语法格式如下:enumerate(iterable[,start])函数的使用说明如下:(1)函数可以接收两个参数,其中第一个参数iterable可以是一个序列、迭代器或其他支持迭代的对象,第二个参数start用于指定索引起始位置,默认起始索引为0。(2)函数返回值为enumerate对象,该对象中的每个元素是一个由索引和值组成的元组(index,value)。6.5.3高阶函数enumerate()函数list1=['沈阳','大连‘,'北京']en=enumerate(list1)print(en)print(type(en))foriinenumerate(list1):print(i)<enumerateobjectat0x000001C6C8192CA0><class'enumerate'>(0,'沈阳')(1,'大连')(2,'北京')案例18:利用递归绘制分形树6.6案例18:利用递归函数绘制分形树绘制操作分析:(1)设置树干初始长度为90像素(2)每次绘制完树枝,画笔右转20度(3)绘制下一段树枝时,长度减少15像素(4)重复(2)、(3)操作直到终止(5)终止条件:树枝长度小于5像素,此时为顶端树枝(6)达到终止条件后,画笔左转40度,以当前长度减少15,绘制树枝(7)右转20度,回到原方向,退回上一个节点,直到操作完成案例18:利用递归函数绘制分形树模块4:time库6.73程序计时函数1时间获取函数2时间格式化函数time库是Python中处理时间的标准库

6.7模块4:time库主要包括三类函数:时间获取函数时间格式化函数程序计时函数6.7模块4:time库time库是Python中处理时间的标准库函数描述time()获取当前时间戳,即计算机内部时间值,浮点数

>>>time.time()

1731589552.4324179ctime()获取当前时间并以易读方式表示,返回字符串

>>>time.ctime()

‘ThuNov1421:05:242024'gmtime()Localtime()获取当前时间,表示为计算机可处理的时间格式

>>>time.gmtime()time.struct_time(tm_year=2024,tm_mon=11,tm_mday=14,tm_hour=13,tm_min=6,tm_sec=16,tm_wday=3,tm_yday=319,tm_isdst=0)

6.7.1时间获取函数

将时间以合理的方式展示出来6.7.2时间格式化函数-格式化:类似字符串格式化,需要有展示模板-展示模板由特定的格式化控制符组成-用来实现时间格式化的方法:strftime()方法

1strftime()函数strftime(format[,s])format是格式化模板字符串,用来定义输出效果s是可选参数,是计算机内部时间类型变量例:>>>importtime>>>t=time.gmtime()或

t=time.localtime(time.time())

6.7.2时间格式化函数

>>>time.strftime("%Y-%m-%d%H:%M:%S",t)

2024-11-1413:14:52'格式化字符串日期/时间说明值范围和实例%Y年份0000~9999,例如:1900%m月份01~12,例如:10%B月份名称January~December,例如:April%b月份名称缩写Jan~Dec,例如:Apr%d日期01~31,例如:25%A星期Monday~Sunday,例如:Wednesday%a星期缩写Mon~Sun,例如:Wed%H小时(24h制)00~23,例如:12%I小时(12h制)01~12,例如:7%p上/下午AM,PM,例如:PM%M分钟00~59,例如:26%S秒00~59,例如:266.7.2时间格式化函数2格式化控制符strftime(tpl,ts):将计算机可处理的时间按照指定格式输出strptime(str,tpl):将指定格式时间,转化为计算机可处理的时间函数描述strptime(str,tpl)str是字符串形式的时间值

tpl是格式化模板字符串,用来定义输入效果

>>>timeStr='2024-11-1413:14:52'

>>>time.strptime(timeStr,"%Y-%m-%d%H:%M:%S")

time.struct_time(tm_year=2024,tm_mon=11,tm_mday=14,tm_hour=13,tm_min=14,tm_sec=52,tm_wday=3,tm_yday=319,tm_isdst=-1)6.7.2时间格式化函数3时间格式化函数比较-程序计时指测量起止动作所经历时间的过程-测量时间:perf_counter()-产生时间:sleep(),可以用于推迟调用线程的运行。函数描述perf_counter()返回一个CPU级别的精确时间计数值,单位为秒

由于这个计数值起点不确定,连续调用差值才有意义

>>>start=time.perf_counter()

318.66599499718114

>>>end=time.perf_counter()

341.3905185375658

>>>end-start

22.724523540384666sleep(s)s拟休眠的时间,单位是秒,可以是浮点数

>>>time.sleep(3.3)#程序将等待3.3秒后进行下一操作6.7.3程序倒计时函数案例19:数字时钟动态显示6.86.8案例19:数字时钟动态显示七段数码管绘制16.8案例19:数字时钟动态显示步骤1:绘制单个数字对应的数码管步骤2:绘制静态数字时钟步骤3:美化静态数字时钟步骤4:绘制动态数字时钟6.8案例19:数字时钟动态显示绘制流程2七段数码管由7个基本线条组成七段数码管可以有固定顺序不同数字显示不同的线条6.8案例19:数字时钟动态显示步骤1:绘制单个数字对应的数码管需要绘制1号

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论