Python语言程序设计课件 第4章 函数_第1页
Python语言程序设计课件 第4章 函数_第2页
Python语言程序设计课件 第4章 函数_第3页
Python语言程序设计课件 第4章 函数_第4页
Python语言程序设计课件 第4章 函数_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第4章函数CATALOGUE目录4.1

函数的定义4.2

参数4.3

返回值4.4

作用域4.5

递归函数4.6

匿名函数4.7常用库函数4.8__main__使用4.14.1.1函数的定义4.1.2函数创建4.1.3函数调用一组指令集合,旨在执行特定的任务4.1.1函数的定义基本概念自定义函数:用户自定义标准库函数:abs()、eval()分类简化编程任务和提升代码的复用性作用Python使用def保留字定义一个函数,语法形式如下:#def<函数名>(<参数列表>):<函数体>return<返回值列表>4.1.2函数的创建def关键字#例如,创建一个计算两个数之和的函数:defadd_numbers(a,b):sum=a+breturnsum4.1.2函数的创建示例>>>result=add_numbers(3,4)>>>print(result)#输出:74.1.3函数的调用通过函数名加上括号的形式来调用它,括号内传入实际的参数值。函数的调用可以发生在程序的任何地方,只要在调用之前函数已经被定义即可。函数调用时传递的参数数量和类型必须与函数定义时的参数列表相匹配,否则会导致错误。如果函数没有return语句,或者return语句后面没有跟随表达式,那么函数默认返回None。4.1.3函数的调用注意defget_coordinates():x=10y=20returnx,ycoords=get_coordinates()print(coords)#输出:(10,20)4.1.3函数的调用示例返回的是一个包含两个元素的元组defnew_year_greeting():print("HappyNewYear'sDay!")defpersonalized_new_year_greeting(name):new_year_greeting()new_year_greeting()print("HappyNewYear,dear{}!".format(name))new_year_greeting()personalized_new_year_greeting("Alice")print()personalized_new_year_greeting("Bob")4.1.3函数的调用函数的嵌套4.2参数4.2.1参数类型4.2.2参数传递4.2.1参数类型(1)位置参数:最基础的参数传递形式,函数调用时,传递的实参会按照位置依次对应到函数定义中的形参。123defgreet(name,age):print(f"Hello,mynameis{name}andIam{age}yearsold.")greet("Alice",25)Hello,mynameisAliceandIam25yearsold.4.2.1参数类型(2)关键字参数:调用函数时显式地指定参数名称123defgreet(name,age):print(f"Hello,mynameis{name}andIam{age}yearsold.")greet(age=25,name="Alice")Hello,mynameisAliceandIam25yearsold.4.2.1参数类型(3)默认参数:允许在函数定义时为某些参数设定默认值,调用函数时如果不提供这些参数的实参,函数会使用默认值defgreet(name,age=18):print(f"Hello,mynameis{name}andIam{age}yearsold.")greet("Bob")#使用默认值age=18greet("Alice",25)#提供了age的值Hello,mynameisBobandIam18yearsold.Hello,mynameisAliceandIam25yearsold.4.2.1参数类型(3)默认参数:允许在函数定义时为某些参数设定默认值,调用函数时如果不提供这些参数的实参,函数会使用默认值defgreet(age=18,name):print(f"Hello,mynameis{name}andIam{age}yearsold.")greet("Bob")#使用默认值age=18greet("Alice",25)#提供了age的值

默认参数必须位于函数参数列表的最后,不能在位置参数之前,否则会导致语法错误。ERROR!!!!4.2.1参数类型(4)可变参数:

*args:接收任意数量的位置参数,将其打包成一个元组。**kwargs:接收任意数量的关键字参数,将其打包成一个字典。deffun_with_args(*args):forarginargs:print(arg)fun_with_args(1,2,3)#输出1,2,3deffun_with_kwargs(**kwargs):forkey,valueinkwargs.items():print(f"{key}={value}")fun_with_kwargs(name="Alice",age=25)#输出name=Alice,age=25必须放在所有位置参数和默认参数之后4.2.2参数传递(1)值传递

函数处理的只是数据的一个复制品:在调用函数时,将实参的副本传递给形参,函数内部对该副本的修改不会影响到原来的实参。defmodify_value(x):x=x+10print(f"Insidefunction:{x}")num=5modify_value(num)print(f"Outsidefunction:{num}")数值类型、字符串等不可变对象通常使用值传递。输出:Insidefunction:[1,2,3,4]Outsidefunction:[1,2,3,4]4.2.2参数传递(2)引用传递

函数内部对引用的修改会直接影响到实参本身。defmodify_list(lst):lst.append(4)print(f"Insidefunction:{lst}")my_list=[1,2,3]modify_list(my_list)print(f"Outsidefunction:{my_list}")列表、字典等类型通常使用值传递。输出:Insidefunction:15Outsidefunction:54.2.2参数传递实例4-2:BMI计算器

用户输入自己的体重(单位为千克)和身高(单位为米),程序计算出用户的BMI值,并根据该值判断用户的体型(偏瘦、正常、超重或肥胖)。4.2.2参数传递实例4-2:BMI计算器

defcalculate_bmi(weight,height):bmi=weight/(height**2)returnbmiif__name__=="__main__": weight=float(input("请输入您的体重(千克):"))height=float(input("请输入您的身高(米):"))bmi=calculate_bmi(weight,height)print("您的BMI指数是:{:.2f}".format(bmi))ifbmi<18.5:print("您的体型偏瘦")elif18.5<=bmi<24:print("您的体型正常")elif24<=bmi<28:print("您的体型超重")else:print("您的体型肥胖")4.3返回值使用return语句为函数指定返回值如果返回的是多个值,那么该变量中保存的是一个元组。return[value]#value是可选参数,用于指定要返回的值,可以返回一个或多个值。4.3返回值当函数中没有return语句时,或者省略了return语句的参数时,则默认返回None,即空值defAdd(a,b):returna+b;#返回值Sum=Add(2,3)printf(Sum)运行结果输出:5defAdd(a,b):print(a+b)Sum=Add(2,3)print(Sum)#打印结果print(type(Sum))#打印结果类型运行结果输出:5None<class'NoneType'>4.3返回值实例4-3:商场促销为了吸引顾客,某商场设计了一个促销活动,当顾客消费满500元时,可享受9折优惠;消费满1000元时,可享受7.5折优惠;消费满2000元时,可享受6.5折优惠;消费满3000元时,可享受5.5折优惠。根据以上商场促销活动,计算优惠后的实付金额。4.3返回值实例4-3:商场促销deffun_checkout(money):discount_thresholds=[(3000,55),(2000,65),(1000,75),(500,90)]forthreshold,rateindiscount_thresholds:ifmoney>=threshold:discounted_amount=money*(rate/100)returnround(discounted_amount,2)returnmoneyprint("输入消费金额:")money_input=eval(input())#输入顾客消费金额print(f"顾客消费{money_input}元,实付金额为:{fun_checkout(money_input)}元")4.4作用域即变量的作用范围,即程序能够访问该变量的区域局部变量函数内部定义并被使用的变量,其作用范围仅限在函数内部全局变量能够作用于函数以外的变量4.4作用域局部变量如果在函数外部使用在函数内部定义的变量会怎样呢?defDemo():message='这是一个局部变量'#在函数内部输出该变量print(message)Demo()print(message)运行结果输出:这是一个局部变量Traceback(mostrecentcalllast):File"D:\PythonProject\main.py",line6,in<module>print(message)NameError:name'message'isnotdefined4.4作用域全局变量作用域是整个程序,其不仅在函数外可以访问到,在函数内也可以被访问。message='这是一个全局变量'defDemo():#在函数内部输出该变量print(message)Demo()#在函数外部输出该变量print(message)运行结果输出:这是一个全局变量这是一个全局变量4.4作用域全局变量在以下的程序中,又会输出什么呢?message='这是一个全局变量'defDemo():#在函数内部声明一个与全局变量同名的局部变量message='这是一个与全局变量同名的局部变量'#在函数内部输出该变量print(message)Demo()#在函数外部输出该变量print(message)运行结果输出:这是一个与全局变量同名的局部变量这是一个全局变量在函数内部,全局变量会被同名的局部变量所覆盖,如何使用同名的全局变量呢?4.4作用域global使用global关键字声明该变量为全局作用域count=0#全局变量

defincrement():globalcount#声明使用全局变量count+=1#修改全局变量的值

print("修改后count的值:",count)increment()#调用函数

print("全局变量count的值:",count)#输出修改后的结果运行结果输出:修改后count的值:1全局变量count的值:14.5递归函数定义:递归函数是指在函数内部调用自身的函数。递归通过将复杂问题分解为规模较小的同类问题,并借助函数的自我调用来逐步解决,直到达到一个明确的终止条件。基本特征:基本情况:递归的终止条件递归步骤:自我缩小的过程4.5递归函数递归的过程以阶乘的计算为例说明递归的过程4.5递归函数递归的过程以阶乘的计算为例说明递归的过程deffactorial(n):#基准条件:0的阶乘是1ifn==0: return1#递归步骤:n的阶乘是n乘以(n-1)的阶乘

else:returnn*factorial(n-1)#测试函数

print(factorial(5))#输出:1204.5递归函数两个要求在递归调用自身时,应当确保每一次调用都在逐步缩小问题的规模,直至达到可以直接解决的基础情况。递归调用应当包含一个明确的终止条件,即当达到某个特定的基准情况时,递归将停止并返回结果,无需再进一步调用自身。以阶乘为例,当递归到计算1的阶乘时,无需再递归调用,直接返回结果1。4.5递归函数实例4-4诗仙李白,一生好酒。提壶买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒。请计算并输出壶中原有酒几斗?4.5递归函数实例4-4诗仙李白,一生好酒。提壶买酒,遇店加一倍,见花喝一斗,五遇店和花,喝光壶中酒。请计算并输出壶中原有酒几斗?4.5递归函数实例4-4在以下的程序中,又会输出什么呢?defWine(n,count):#其中n代表遇店花次数,count代表最后剩余酒数ifn==0:returncountelse:returnWine(n-1,(count+1)/2)n=eval(input(“请输入遇到店花的次数:”))count=eval(input(“请输入最后剩余的酒数:”))c=Wine(n,count)print(“最初有酒{:.2f}斗”.format(c))运行结果输出:请输入遇到店花的次数:5请输入最后剩余的酒数:0最初有酒0.97斗4.6匿名函数定义即不再使用def语句这样标准的形式定义一个函数使用lambda创建匿名函数<函数名>=lambda<参数列表>:<表达式>等同于:def<函数名>(<参数列表>): return<表达式>4.6匿名函数举例#定义一个简单的lambda函数,实现两个数相加add=lambdax,y:x+yresult=add(3,5)print(result)#输出:84.6匿名函数更多举例>>>ls=[-5,-9,6,10,8]>>>print(sorted(ls)) #[-9,-5,6,8,10]>>>print(sorted(ls,key=lambdax:x**2))#[-5,6,8,-9,10]>>>ls=[‘58’,’01’,’9’,’920’]>>>print(sorted(ls)) #[‘01’,’58’,’9’,’920’]>>>print(sorted(ls,key=lambdax:int(x))) #[‘01’,’9’,’58’,’920’]>>>print(sorted(ls,key=lambdax:len(x))) #[‘9’,’58’,’01’,’920’]4.7常用库函数4.7.1分类自带函数三方库4.7常用库函数4.7.2pip管理工具1.安装pipinstall<库名>以下是一些常用镜像源的地址:清华大学镜像源:/simple豆瓣镜像源:/simplepipinstall<库名>-i/simple4.7常用库函数4.7.2pip管理工具2.查看已安装库piplist4.7常用库函数4.7.2pip管理工具3.更新库pipinstall--upgrade<库名>4.卸载库pipuninstall<库名>5.指定版本号安装pipinstalltqdm==4.60.04.7常用库函数4.7.3time库Python中处理时间的标准库,是最基础的时间处理库time标准库的三类主要函数:(1)时间获取:time().ctime().gmtime()(2)时间格式化:strftime().strptime()(3)程序计时:sleep().perf-counter()4.7常用库函数4.7.3time库-举例>>>time.time()1524146321.7763612>>>time.ctime()'ThuApr1921:59:342018'#星期四2018-4-1921:59:34>>>time.gmtime()time.struct_time(tm_year=2018,tm_mon=4,tm_mday=19,tm_hour=14,tm_min=1,tm_sec=8,tm_wday=3,tm_yday=109,tm_isdst=0)4.7常用库函数4.7.3time库-举例>>>time.strftime('%Y-%m-%d%H:%M:%S',time.localtime())'2018-04-2010:34:57'>>>time.strptime('2018-4-1922:14:15','%Y-%m-%d%H:%M:%S')time.struct_time(tm_year=2018,tm_mon=4,tm_mday=19,tm_hour=22,tm_min=14,tm_sec=15,tm_wday=3,tm_yday=109,tm_isdst=-1)4.7常用库函数4.7.3time库-举例>>>start=time.perf_counter()>>>end=time.perf_counter()>>>end-start10.7022517183955344.7常用库函数4.7.4tqdm库三方库,用于在循环和进度较慢的操作中显示进度条pipinstalltqdm最简单的用法是将需要迭代的对象直接传递给tqdm。4.7常用库函数4.7.4tqdm库fromtqdmimporttqdmimporttime#示例:在一个循环中显示进度条foriintqdm(range(100)):time.sleep(0.1)#模拟耗时任务4.7常用库函数importtimefromtqdmimporttqdm#模拟一个耗时任务的函数defsimulate_task(task_time):time.sleep(task_time)#假装执行任务需要一定时间#主程序:模拟批量处理多个任务if__name__=="__main__":tasks=range(10)#模拟10个任务print("开始任务...")#使用tqdm显示进度条fortaskintqdm(tasks,desc="Processingtasks",unit="task"):simulate_task(0.5)#每个任务耗时0.5秒print("任务全部完成!")实例4-5:任务进度显示结合tqdm和time库的实例,模拟一个耗时的任务,并显示其进度4.8__main__使用定义_name__是一个内置变量,它的值取决于Python文件的执行方式:如果模块是被直接运行的程序,那么__name__的值会被设置为"__main__".如果模块是被其他模块导入的,那么__name__的值会是该模块的文件名(不带路径和扩展名)。通过使用if__name__=="__main__":,我们可以控制某些代码块只在模块被直接执行时运行,而不会在被导入时执行。这4.8__main__使用例子1:单个文件直接运行#script.pydefgreet():print("Hellofromgreetfunction!")if__name__=="__main__":#只有当模块被直

温馨提示

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

评论

0/150

提交评论