收藏 分销(赏)

(本科)第4章 Python函数与模块 -课件.pdf

上传人:曲**** 文档编号:229830 上传时间:2023-03-20 格式:PDF 页数:39 大小:1.72MB 下载积分:19 金币
下载 相关 举报
(本科)第4章 Python函数与模块 -课件.pdf_第1页
第1页 / 共39页
(本科)第4章 Python函数与模块 -课件.pdf_第2页
第2页 / 共39页


点击查看更多>>
资源描述
。第4章Python函数与模块 夏敏捷课程主讲人:第4章Python函数与模块r 4.1函数的定义和使用在Python程序开发过程中,将完成某一特定功能并经常使用的代码编写成函数,放在函数库(模块)中供大家选用,在需要使用时直接调用,这就是程序中的函数。def函数名(函数参数):函数体return表达式或者值defprintHello():#打印hello字符串print(hello)def printNum():#输出 0-9 数字fbr i in range(0,10):print(i)returndef add(a,b):#实现两个数的和return a+b4.1.2函数的使用def add(a,b):return a+bprint(add(l,2)【例4-1】编写函数实现最大公约数算法,通过函数调用代码实现求最大公 约数。,4.1.3 lambda表达式lambda表达式可以用来声明匿名函数,即没有函数名字的临时使用的小函数,只可以包含一个表达式,且该表达式的计算结果为函数的返回值,不允 许包含其他复杂的语句,但在表达式中可以调用其他函数。例如:f=lambda x,y,z:x+y+z print(f(l,2,3)等价于定义:def f(x,y,2):return x+y+z print(f(l,2,3)函数使用return返回值)也可以将Lambda表达式作为函数的士 最后需要补充一点:Python中函数是可以返回多个值的)如 会将多个值放在一个元组或者其他类型的集合中来返回。def*x,y,z):return x+y+z print(f(1,2,3)资4.1.3 lambda表达式【例4-3】列表元素排序。每个列表元素有3个数据,分别是姓名、学号和成绩,请分别按姓名、学号和成绩排序。65print。按姓名排序。print(sorted(score,key=lambda x:xO)#按元素中序号为。的数据排序print。按学号排序,)print(sorted(score,key=lambda x:xl)#按元素中序号为 1 的数据排序print。按成绩排序,)print(sorted(score,key=lambda x:x2)#按元素中序号为2的数据排序sorted(list,key=None,reverse=False)参数key可以接收一个函数(仅有一个参数)来实 现自定义排序。借助lambda函数指定排序关键字。函数使用return返回值,也可以将Lambda表达式作为函数的返回值。最后需要补充一点:Python中函数是可以返回多个值的)如果返回多个值,会将多个值放在一个元组或者其他类型的集合中来返回。def demo(s):result=0,0fbr ch in s:ifav=chv=z:resultl+=1elif Av=ch=Z:result0+=1 return resultprint(demo(,aaaabbbbC,)#返回列表r 4.2函数参数4.2.1 函数形参和实参的区别形参全称是形式参数,在用def关键字定义函数时函数名后面括号里的变量 称作为形式参数。实参全称为实际参数,在调用函数时提供的值或者变量 称作为实际参数。例如:#这里的a和b就是形参def add(a,b):return a+b#下面是调用函数 add(l,2)#这里的1和2是实参4.2.2参数的传递在Python中参数传递采用的是值传递,这个和C语言有点类似O对于绝大多数情况下,在函数内部直接修改形参的值不会影响实参。def addOne(a):a+=1print(a)#输出 4a=3addOne(a)print(a)#输出 34.2.2参数的传递在有些情况下,可以通过特殊的方式在函数内部修改实参的值。def modify l(m,K):m=2K=4,5,6 returndef modify2(m,K):m=2 K0=0 return#主程序 n=100 L=l,2,3 modify l(n,L)print(n,L)modify2(n,L)#同时修改了实参的内容i2图4-2执行modify!前后示意图4.2.3函数参数的类型在Python中函数参数定义和传递的方式相比而言就灵活多 1.默认值参数在于它能够给函数参数提供默认值。def display(a-hellob=red,):print(a+b)#主程序display()display(b=world)display(a=6china,)display(,world,)4.2.3函数参数的类型 2.关键字参数避免了用户需要牢记位置参数顺序的麻烦。def display(a,b):print(a)print(b)下面2句达到的效果是相同的。display(a=,worldb=,hello,)display(b-helloa-worldt)4.2.3函数参数的类型 3.任意个数参数 一般情况下我们在定义函数时,函数参数的个数是确定的,然而某 些情况下我们是不能确定参数的个数的,比如要存储某个人的名字 和它的小名,某些人小名可能有2个或者更多个,此时无法确定参数 的个数,只需在参数前面加上或者def storename(name,*nickName):print(real name is%s%name)for nickname in nickName:print(小名nickname)#主程序storename(,张海,)storenameC 张海?小海,)storenameC张海?小海?小豆豆,)和,*,表示能够接受0到任意多个参数,*,表示将没有匹配的值都放在同一个元组 中,味*,表示将没有匹配的值都放在一个字典中。4.2.4变量的作用域 i.局部变量在函数内定义的变量只在该函数内起作用,称为局部变量。def fiin():x=3count=2while count0:print(x)count=count-1fun()print(x)#错误4.2.4变量的作用域2.全局变量还有一种变量叫做全局变量,它是在函数外部定义的,作用域 是整个程序。全局变量可以直接在函数里面使用,但是如果要 在函数内部改变全局变量值,必须使用global关键字进行声明。x=2#全局变量def funl():print(x,end=”)def fun2():global x#在函数内部改变全局变量值必须使用global关键字x=x+lprint(x,end=”)funl()fun2()print(x,end=n)4.3闭包和函数的递归调用 4.3.1 闭包(closure)在Python中)闭包指函数的嵌套。可以在函数内部定义一个 嵌套函数。def funclibQ:def add(x,y):return x+yreturn add#返回函数对象fadd=func_lib()print(fadd(l,2)4.3.2函数的递归调用 i.递归调用函数在执行的过程中直接或间接调用自己本身,称为递归调 用。Python语言允许递归调用。def f(x):if x=l:return 1else:return(f(x-1)+x*x)print(f(5)#递归调用结束的条件#调用f()函数本身4.3.2函数的递归调用 2.递归调用的执行过程递归调用的执行过程分为递推过程和回归过程两部分。勃 fac(3 酶 fac(2)幽 fac(l)gn=4 n=3 nf=2 n=lfac(4)pn辿a*4letnrn础阳碱犷献fac(4)24 fac(3)6尸细I*3 retunac(3)-64.4内置函数内置函数(built-in functions)又称系统函数)或内建函数)是指Python本身所提供的函数,任何时候都可以使用。Python常用的内置函数有数学运算函数、类型转换函数和反射函数 等。想要查所有内置函数名可以在python命令行方式中如下输入:dir(_builtins_)4.4内置函数表4-1数学运算函数函数具体说明一abs(x)求绝对值。参数可以是整型,也可以是复数5若参数是复数,则返回复教的模。/complex(real,imag)创建一个复数。一divmod(&by分别取商和余数。例如divmod(20:6)结果是(3:2AfloaH xR将一个字符串或数转换为浮点数,如果无参数将返回0.0。例如丹。曲?3)结 果是1230mt(xT base)将一个字符转换为mt类型,base表示进制。例如血(100;base=2)结果是3powj y)返回x的y次累。pow3)结果是加range(start,stop step)*3产生一个序列,默认从0开始,round(xt n对参数x的第n-1位小数进行四舍五入,返回一个小数位数为n的浮点数。sumCiterablef,start)*3对集合求和bool(x)/将x转换为Boolean类型。例如booi(5)结果是I hie,booK0)结果是Falseeval(str)将字符串也当成有效的表达式来求值并返回计算结果。例如结 果是&4.4内置函数表42字符串函数方法。描述string,capitalize。把字符串的第一个字符大写二string.count(strT beg=O,end=len(string)返回str在string里面出现的次数,如果beg或者end指定则返回 指定范围内str出现的次数,strmg.decode(encodmg=UTF-8,)以encoding指定的编码格式解码string-1string.endsvi(obj7beg=0 v:end=】en(strmg)检查字符串是否以。的结束,如果beg或者end指定则检查指定的 范围内是否以gj结束,如果是返回Tme.否则返回False*string,findfstr,beg=O,end=len(string)检测str是否包含在string中,如果beg和end指定范围,则检查 是否包含在指定范围内,如果是返回开始的索引值,否则返回string.index(strT beg=O:end=len(string)跟find。方法一样,只不过如果str不在string中会报一个异常。string.isalnum()如果string至少有一个字符并且所有字符都是字母或数字则返回 Thia否则返回False*string.isalpha()如果string至少有一个字符并且所有字符都是字母则返回True:否则 返回 False*14.4内置函数表42字符串函数方法。描述string,capitalize。把字符串的第一个字符大写二string.count(strT beg=O,end=len(string)返回str在string里面出现的次数,如果beg或者end指定则返回 指定范围内str出现的次数,strmg.decode(encodmg=UTF-8,)以encoding指定的编码格式解码string-1string.endsvi(obj7beg=0 v:end=】en(strmg)检查字符串是否以。的结束,如果beg或者end指定则检查指定的 范围内是否以gj结束,如果是返回Tme.否则返回False*string,findfstr,beg=O,end=len(string)检测str是否包含在string中,如果beg和end指定范围,则检查 是否包含在指定范围内,如果是返回开始的索引值,否则返回string.index(strT beg=O:end=len(string)跟find。方法一样,只不过如果str不在string中会报一个异常。string.isalnum()如果string至少有一个字符并且所有字符都是字母或数字则返回 Thia否则返回False*string.isalpha()如果string至少有一个字符并且所有字符都是字母则返回True:否则 返回 False*1反射函数主要用于获取类型,对象的标识、基类等操作,见表4-3所示。表4-3反射函数函数2具体说明,getattr(object name:defalut)获取一个类的属性小globals()q返回一个描述当前全局符号表的字典hasattr(objecL name*判断对象object是否包含名为name的特性hash(objects如果对象object为哈希表类型,返回对象object的哈希值一id(object)*1返回对象的唯一标识一isinstance(object,classmfo)4;,判断object是否是class的实例Qissubclass(ciass;classinfo)判断是否是子类locals。返回当前的变量列表mapffunctioiL iterable,.)*遍历每个元素,执行fimction操作/memonview(obj)*返回一个内存镜像类型的对象“next(iteratorr default)类似于 iterator.next()object(X基类rpropeny(fget fsett fdelt doc属性访问的包装类,设置后可以通过c.x=vaiue等来访问setter和getterreloadCmodule)*1重新加载模块setattr(object name,value),?设置属性值小repr(object)*7将一个对象变幻为可打印的格式stati cmethod声明静态方法,是个注解super(typeL object-or-tpe)引用父类type(object返回该object的类型“vars(object)*3返回对象的变量,若无参数与diet。方法类似4.4内置函数表4-4 10函数函数/描述file(filename:mode:bufsize)p行把类型的构造函数,作用为打开一个文件,如果文件不存在且mode为 写或追加时,文件将被创建。添加方到mode参数中,将对文件以二进制 形式操作。添加到mode参数中,将允许对文件同时进行读写操作。户input(prompt 获取用户输入,输入都是作为字符串处理。丁bpen(nameLmodeLbuffring打开文件,推荐使用open函数,注意python3,已经移除file函数。print(打印函数/4.5模块模块(module)能够有逻辑地组织你的Python代码段。把相关的代码分配到一个模块里能让代码更好用,更易懂o简单地说,模块就是一个保存了 Python代码的文件。模块里能定义函数,类和变量。import math#导入math模块print(50的平方根:”,math.sqrt(50)y=math.pow(5,3)print(”50 的平方根:”,y),451 import导入模块i.导入模块方式在Python中用关键字import来导入某个模块。方式如下:import模块名#导入模块有时候我们只需要用到模块中的某个函数,只需要引入该 函数即可,此时可以通过语句:from 模块名import函数名1,函数名2.通过这种方式引入的时候,调用函数时只能给出函数名,不能给出模块名4.5.2定义自己的模块在Python中)每个Python文件都可以作为一个模块)模块的名字就是文件的名字。比如有这样一个文件fibo.py)在fibo.py中定义了3个函数 add。,fib。,fib2Q:那么在其他文件(如testpy)中就可以如下使用:#test.pyimport fibo加上模块名称来调用函数:fibo.fib(lOOO)#结果是 1 1 2 3 5 8 13 21 3455 89 144 233 377 610 987fibo.fib2(100)#结果是1,1,2,3,5,8,13,21,34,55,8 9test.add(2,3)#结果是 54.5.4 calendar 模块“此模块的函数都是与日历相关的,例如打印某月的字符月历。星期一是默认的每周第 一天,星期天是默认的最后一天。更改设置需调用calendar.se惜rstweekday。函数。calendar模块中包含的函数如表47所示。表4-7 calendar模块中的函数,函 数*描 述ecalendar(year,w=2,l=1,c=6)返回一个多行字符串格式的year年年历,3个月一行,间隔距离为c,每日宽度 间隔为w字符。每行长度为21,W+18+2*C。1是每星期行数firstweekdayO*3返回当前每周起始日期的设置。默认情况下,首次载入calenda模块时返回0,即星期一“isleap(year)j是闰年返回True,否则为False。Ieapdays(y1,y2)-返回在y1.y2两年之间的闰年总数Qmonth(year,month,w=2,1=1)返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽 度间隔为w字符。每行的长度为7*w+6 I是每星期的行数,monthcalendar(year,month)-返回一个整数的单层嵌套列表。每个子列表装载代表一个星期的整数。year年 month月外的日期都设为0;范围内的日子都由该月第几日表示,从1开始.month range(year,month)p返回两个整数。第一个是该月的星期几的日期码,第二个是该月的日期码。日从0(星期一)到6(星期日);月从1到12Psetfirstweekday(weekday)3设置每周的起始日期码,0(星期一)到6(星期日八、timegm(tupletime)和time.gmtime相反:接受一个时间元组形式,返回该时刻的时间番(1970纪元 后经过的浮点秒数)weekday(year,month,day)*3返回给定日期的日期码。0(星期一)到6(星期日卜月份为1(一月)到12(12月 calendar.isleap(2019)False print(calendar.calendar(2019)calendar.weekday(2019,4,4)32019January Mo Tu We Th FrSa SuF ebruary Mo Tu We Th Fr3 0 7 4 1 112 32 9 6 3 012 318 5 2 912 27 4 1812 2512192661320274 11 18 25512192661320277 814 1521 2228Sa Su2 39 1016 1723 24MarchMo Tu We Th FrSa Su4 5 6 7 8 911 12 13 14 15 1618 19 20 21 22 2325 26 27 28 29 30AprilMo Tu We Th FrSa SuJuneMo Tu We Th Fr Sa Su2 9 6 3 012 31 00 5 2 912 20 7 41X 1x C J5 2 9 61X 1x C J4 18 51X C x i7 4 1812 26 3 0 712 26 3 0 712 2MayMo Tu We Th Fr Sa Su347IOII1214171819212425 2628315 2 9 61X 1x C l4 18 51X 1x C s l3 0 7 41X 1x7 8 914 15 1621 22 2328 29 304.5.5 random 模块random模块随机数可以用于数学、游戏等领域,还经常被嵌入到算法中,用以提高算法效率,并提高程序的安全性。随机数函数在random模块中,常用的随机数函数如表48所示。“表4-8常用的随机数函数一函 数/描 述-random.choice(seq)4:从序列的元素中随机挑选一个元素,如random.choice(mnge(10),从。到9 中随机挑选一个整数户random.randrange(start,stop.step)从指定范围内,按指定step递增的集合中获取一个随机数,s【ep默认值为1,如random.andange(6),从0到5中随机挑选一个整数random.random()&随机生成下一个实数,它在0,1)范围内,random.seed(x)改变随机数生成器的种子seedo如果不了解其原理,不必特别去设置seed,Python会帮助选择seed*3random.shuffle(list)将序列的所有元素随机排序一random.uniform(x.y)Q随机生成下一个实数.它在x,y范围内/random.randint(x,y)/随机生成下一个整数.它在x,y范围内2random模块 a=23,45,22,55,44,67,84,45,78 import random random,choice(a)#67 random,randrange(100)#58 random,randrange(6)0 random,randrange(6)1 random,shuffle(a)a23,22,55,45,84,44,78,67,45 random,shuffle(a)a55,45,78,44,84,67,23,22,45 random,randint(100,200)149.5.6-math模块和cmath模块math模块实现了许多对浮点数的数学运算函数,这些函数一般是对C语言库中同名函数的简单封装。math模块的数学运算函数如表49所示。/表4-9 math模块的数学运算函数,函 数说 明cmath.e*3自然常数1math.pQ圆周率pkmath.degrees(x)*5弧度转度/math.radians(x)*3度转弧度math.exp(x)*3返回e的x次方”math.expm1(x)p返回e的x次方减“math.log(x,base)返回x的以base为底的对数,base默认为emath.log 10(x)返回X的以10为底的对数2math.pow(x,yp返回x的y次方”math.sqrt(x)*3返回X的平方根/math.ceil(x)*3返回不小于X的整数,math.floox)*3返回不大于X的整数,math.trunc(x)返回X的整数部分发牌程序控制台版游戏初步【案例】扑克牌发牌程序。4名牌手打牌,电脑随机将52张牌(不含大小鬼)发给4名 打牌,在屏幕上显示每位牌手的牌。恒国File Edit Shell Debug Options Window Help Python 3.5.1 Shelly 5 P8 1XLT?JK里,黑 c o 5程22,10A-牌,4 发3 S黑里(台23,1 制,控29.于 71*9 630,48,21,27,2,14Python 3.5.1(吟 5J:37ao7严5型,Dec 6 7015,01:38:48)MSC v.1900 32 bit(Intel)on Win32 Type”copyright,credits or license。”for more information.Ln:10 Col:44 3+匕7 2 模,4耕弼 与491草罩黑黑LVA 5 o A爹 S 1+七6 Q 函33A化督化 g,L早田早生早t 3 1 Q4-匕 4 9 py,加化 448红一早里早 上巨,5 q 与 J6A+心 J7 羯394M包的化 祥,也红草草草1 2Tfl 3 8L84 代,卫针包化 稿162红草草草 r-n TJ+T Jo 5HK 3 on424l 化 th,力红一,红草 y 5 4 p 7工勾7 丈1 工幺一工工 hncsr47K 晨 2 6/3 hkbkuku 稿 利司、匈.u6 J7 A Q 8 01138#$#$:/2,方方方方:5 12 4 2 9 J 6 2028方方方方J Jo 3 5 4 246 为 Hlo,松方方方 1 游戏初步发牌程序控制台版分析:将要发的52张牌,按梅花。12,方块1325,红桃2638,黑桃3951顺序编号 并存储在pocker列表(未洗牌之前)。也就是说,列表某元素存储的是14,则说明是方块2;存储 的是26则说明是红桃A。gen_pocker(n)随机产生两个位置索引)交换两个位置的牌)进行100次随机交换两张牌,从而达到洗牌目的。发牌时)将交换后pocker列表,按顺序加到4个牌手的列表 中。如果pocker列表(未洗牌之前)直接存储扑克牌)而不是 扑克牌的编号,则程序更加简单,但是pocker列表创建书 写麻烦一些。#主程序(a,b,c,d)=(Q,D,D?D#&、b、c、d四个列表分别存储4个人的牌#pocker=getP uk(i)for i in range(n)#未洗牌之前pocke.草花A7草花27草花3丁草花4丁草花5丁草花6丁草花7丁草花8丁草花9丁 草花1 0,草花J,草花Q,草花K7方块A/方块27方块37方块47方块57方块 67方块7方块8,方块9,方块1 0,方块J,方块Q,方块K/红桃A/红桃27 红才兆3,红才兆4,红才兆5,红才兆6,红才兆7,红才兆8,红才兆9,红才兆1 0,红才兆J,红才先 Q7红桃K7黑桃A,黑桃2丁黑桃37黑桃4丁黑桃57黑桃67黑桃77黑桃87黑 桃97黑桃10 丁黑桃JT黑桃Q7黑桃K#未洗牌之前pocker=gen_pocker(n)#洗牌目的print(pocker)for x in range(13):m=x*4a.append(pockerm)b.append(pockerm+l)c.append(pockerm+2)d.append(pockerm+3)print(牌手for x in a:print(x,end=n n)pHnt(”n牌手2,end=:)for x in b:print(x,end=n n)print(”n牌手3”,end=:)for x in c:print(x,end=n H)print(”n牌手4”,end=:)for x in d:#发牌,每人13张牌print(x,end=n n)窗游戏初步人机对战井字棋游戏【案例】人机对战井字棋游戏。在九宫方格内进行,如 果一方首先某方向(横、竖、斜)连成3子,则获取胜利 O游戏中输入方格位置代号,形式如下:0SSS游戏中,board棋盘存储玩家、电脑落子信息,未落子处 为EMPTY。由于人机对战,需要实现电脑智能性玩家你是否先走(y/n):y 玩家你先走.0|1|2 3|4|5 6|7|8你走那个位置?(0-8):0 X|l|2 3|4|56|7|8 电脑下棋位置4X|l|23|0|56|7|8略过电脑下棋位置6X|X|OX|O|5O|7|8由歌嘉1希在音辘识出流进习题1.编写一个函数,将华氏温度转换为摄氏温度。公式为。=(F3 2)X5/9。2.编写一个函数判断一个数是否为素数,并通过调用该函数求出所有三位数 的素数。5.编写一个函数,功能是求两个正整数3和九的最大公约数。6.编写一个函数,求方程数2+bx+c=O的根,用3个函数分别求当后4公大于0、等于0和小于。时的根,并输出结果。要求从主函数输入以A c的值。7.编写一个函数,调用该函数能够打印一个由指定字符组成的力行金字塔。其 中,指定打印的字符和行数力分别由两个形参表示。8.编写一个判断完数的函数。完数是指一个数恰好等于它的因子之和,如 6=1+2+3,6就是完数。9.编写一个将十进制数转换为二进制数的函数。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 考试专区 > 专升本考试

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服