Python程序设计基础教程(微课版) 课件 第5章 - Python自定义函数_第1页
Python程序设计基础教程(微课版) 课件 第5章 - Python自定义函数_第2页
Python程序设计基础教程(微课版) 课件 第5章 - Python自定义函数_第3页
Python程序设计基础教程(微课版) 课件 第5章 - Python自定义函数_第4页
Python程序设计基础教程(微课版) 课件 第5章 - Python自定义函数_第5页
已阅读5页,还剩45页未读 继续免费阅读

下载本文档

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

文档简介

Python程序设计第5章Python自定义函数学习目标识记函数/lambda表达式语法理解函数要素掌握函数的使用知识目标能够根据需求正确编写函数能够使用map()等高级函数简化代码能力目标专业精神与责任开源文化与版权意识情感态度与价值观函数定义与调用01020403函数返回值与参数变量作用域高阶函数目

录函数定义与调用01020403函数返回值与参数变量作用域高阶函数目

录函数概述函数定义函数调用函数:封装了特定任务实现的代码块内置函数标准库函数第三方库函数自定义函数函数代码非调用不执行减少重复代码,避免代码冗余提高代码的可读性和可维护性代码更加模块化,便于组织和维护5.1函数概述985.2函数定义与调用99def函数名([参数列表]):#函数体[return返回值]def:定义函数的关键字函数名:遵循标识符的命名规则([参数列表]):代表函数必须从外部得到的数据,不需要外部数据则小括号内留空冒号:表示下一行开始进入函数体函数体:实现目标功能的语句块,需要缩进return:返回语句,可以带返回值,也可以不带函数模拟切水果机器(定义部分)5.2函数定义与调用100deffruit_cutter(fruit):print(f'开始切{fruit}')pieces=list(fruit)returnpieces示例5-1def函数名([参数列表]):#函数体[return返回值]没有返回值的函数直接调用有返回值的函数可将返回值赋值给其他变量5.2函数定义与调用100函数名([实际参数])变量=函数名([实际参数])函数模拟切水果机器(调用部分)5.2函数定义与调用100deffruit_cutter(fruit):print(f'开始切{fruit}')pieces=list(fruit)returnpiecesfruit_pieces=fruit_cutter('apple')print(fruit_pieces)#['a','p','p','l','e']示例5-1函数定义与调用01020403函数返回值与参数变量作用域高阶函数目

录函数返回值与参数020403变量作用域高阶函数目

录函数定义与调用01函数返回值函数参数返回值是函数内部需要传递到函数外部的数据计算结果:面积计算、利息计算、三角函数状态信息:数据是否保存成功、数据是否合法数据加工结果:排序结果、数据检索结果返回值使用return语句返回给调用者Python函数返回值形式None单一值多个值5.3函数的返回值100返回None值没有return语句,函数体执行完毕返回时遇到return语句但return之后没有数据时5.3函数的返回值100defsay_hello(name):

print(f'Hello,{name}!')ret_val=say_hello('张三')print(ret_val)#输出结果:None示例5-2返回None值没有return语句,函数体执行完毕返回时遇到return语句但return之后没有数据时5.3函数的返回值101defsay_hello(name):print(f'Hello,{name}!')ret_val=say_hello('张三')print(ret_val)#打印结果:None示例5-2defsave(name,age):ifnameisNoneorname=='':print(f'名字({name})不合法')returnifageisNoneorage<0:print(f'年龄({age}不合法)')returnprint('保存完毕!')ret_val=save('',18)print(ret_val)#打印结果:None示例5-3返回单一值(一个return)5.3函数的返回值101defsummary(a,b):returna+bret_val=summary(5,10)print(ret_val)示例5-4返回单一值(多个return)5.3函数的返回值101defto_level(score):ifscore>=90:return'优'elifscore>=80:return'良'elifscore>=70:return'中'elifscore>=60:return'合格'else:return'不合格'示例5-5调用语句:ret_val=to_level(85)print(ret_val)返回多个值:多个数据被函数组合成元组返回5.3函数的返回值101deftop_1(data_list):max_val=max(data_list)idx=data_list.index(max_val)returnmax_val,idxret_val=top_1([1,19,4,-6,15,7])print(ret_val)#打印结果:(19,1)ret1,ret2=top_1([1,19,4,-6,15,7])print(ret1,ret2)#打印结果:191示例5-6参数传递方式决定函数如何接收外部数据位置参数默认参数关键字参数变长参数不可变实参和可变实参5.4参数传递103位置参数:调用函数时,必须按照函数定义中形式参数的顺序,提供实际参数,不能随意改变5.4.1位置参数103defrectangular_perimeter(height,width):return(height+width)*2ret=rectangular_perimeter(3,2)print(ret)打印结果:10示例5-7默认参数:函数定义中可以为某些形参提供默认值,调用函数时如果没有为这些参数提供实参,函数将自动传入定义中指定的默认值5.4.2默认参数104defsay_hello(name='Python'):print(f'Hello,{name}!')say_hello() #打印结果:Hello,Python!say_hello('张三') #打印结果:Hello,张三!示例5-8关键字参数:调用函数时通过“形参名=值”的语法指定参数的值,不必依赖定义中形参的位置顺序5.4.3关键字参数104definfo(name,age,career):print(f'{name}今年{age}岁,职业为{career}')#打印结果:张三今年28岁,职业为飞行员info(name='张三',career='飞行员',age=28)示例5-9变长参数:允许函数接收不定数量的实参*形参名:函数内部将该参数做元组使用调用时依次传入实参,逗号隔开5.4.4变长参数104definfo(*person):print(f'{person[0]}今年{person[1]}岁,职业为{person[2]}')#传递的实参:('张三',28,'飞行员')info('张三',28,'飞行员')示例5-10变长参数:允许函数接收不定数量的实参**形参名:函数内部将该参数做字典使用调用时使用关键字参数传参5.4.4变长参数105definfo(**person):forkinperson:print(k,person[k])#传递的实参:{name:'张三',age:28,career:'飞行员'}info(name='张三',age=28,career='飞行员')示例5-11变长参数使用要点从函数定义中的参数列表看不出具体参数实现方和调用方应协商好参数的具体定义必要情况下提供相应的接口描述5.4.4变长参数105不可变实参:函数内部对形参的修改不会影响实参5.4.5不可变实参与可变实参105defchange_value(a,b):a=bname='张三'change_value(name,'李四')print(name)#打印结果:张三示例5-12可变实参:函数内部对形参的修改会反映到实参5.4.5不可变实参与可变实参105defchange_value(a,b):a[0]=binfo=['张三',28,'飞行员']change_value(info,'李四')print(info)#打印结果:['李四',28,'飞行员']示例5-13函数定义与调用01020403函数返回值与参数变量作用域高阶函数目

录变量作用域0304高阶函数目

录函数定义与调用0102函数返回值与参数全局变量局部变量global关键字变量作用域:变量能够被使用的范围全局变量局部变量5.5变量作用域108全局变量:定义在源文件中,处于函数、类定义之外的变量在整个程序运行期间都存在程序的任何位置都可以读取和修改全局变量5.5.1全局变量108a=10 #定义全局变量ab=5 #定义全局变量bdefsummary(x,y):returnx+yprint(summary(a,b))#将a和b用作实参b+=1#修改变量b示例5-14局部变量:函数内部定义的变量函数被调用时创建,函数执行期间存在只能在该函数内部使用5.5.2局部变量108defdemo():x=2#定义局部变量x

y=4#定义局部变量yprint(x,y)demo()

#打印结果:24print(x)

#报错:NameError:name'x'isnotdefined示例5-15对于一个变量,当函数内部仅读取它时,认为该变量是全局变量5.5.3global关键字109a=10#定义全局变量adefdemo1():b=a+1#仅读取a的值,在全局域中寻找aprint(a,b)demo1()#打印结果:1011示例5-16对于一个变量,当函数内部对它赋值时,认为该变量是局部变量5.5.3global关键字109a=10#定义全局变量adefdemo2():a=20#定义局部变量a,和全局变量a同名,函数内部将覆盖全局变量ademo2()print(a)#打印结果:10示例5-17对于一个变量,当函数内部对它赋值时,认为该变量是局部变量5.5.3global关键字109a=10#定义全局变量adefdemo3():print(a)a=30#a为局部变量,但上一行先使用了ademo3()#报错示例5-17在函数内部修改全局变量的值,需在函数内部用global先行声明5.5.3global关键字109a=10#定义全局变量adefdemo4():globala#声明函数内部使用全局变量aa=20demo4()print(a)#打印结果:20示例5-18global全局变量名函数定义与调用01020403函数返回值与参数变量作用域高阶函数目

录高阶函数04目

录函数定义与调用0102函数返回值与参数03变量作用域lambda表达式map()和filter()闭包高阶函数:能够接受其他函数作为参数,或者返回一个函数作为结果的函数5.6高阶函数110lambda表达式:一种简洁的函数定义方式,定义一个简单的、单表达式的匿名函数参数列表:可以是任意数量的参数,多个参数之间用逗号隔开表达式:通常是一个较为简单的单一表达式,其值即为函数的返回值5.6.1lambda表达式lambda参数列表:表达式将lambda表达式定义的匿名函数存放在变量中,以变量名作为函数名调用5.6.1lambda表达式110f=lambdax,y,z:x+y+zresult=f(1,3,5)print(result)#打印结果:9示例5-19变量名=lambda参数列表:表达式使用lambda表达式对字典键值对排序5.6.1lambda表达式110emotions={0:'anger',-1:'sad',1:'happiness'}result=sorted(emotions.items(),key=lambdax:x[0])print(result)#打印:[(-1,'sad'),(0,'anger'),(1,'happiness')]示例5-20map():接受一个函数和N个(N≥1)可迭代对象作为参数,函数应用于可迭代对象的每个元素,并返回一个迭代器,其中包含应用函数后的结果通常将这个迭代器转换成列表等数据结构后再使用5.6.2map()与filter()111map(函数名,iterable1[,iterable2,...,iterableN]使用map()将列表所有字符串转换为小写5.6.2map()与filter()111fruits=['Apple','Banana','Cherry']result=map(str.lower,fruits)print(list(result))#打印结果:['apple','banana','cherry']示例5-21map()处理多个可迭代对象5.6.2map()与filter()111defmultiply(x,y):returnx*ylist1=[1,2,3,4,5]list2=[6,7,8,9,10]result=map(multiply,list1,list2)print(list(result))#打印结果:[6,14,24,36,50]result=map(lambdax,y:x*y,list1,list2)print(list(result))#打印结果:[6,14,24,36,50]示例5-22filter():用于筛选数据,它接受一个函数和一个可迭代对象作为参数,函数对可迭代对象的每个元素进行测试,并返回一个迭代器,其中包含测试结果为True的元素通常将这个迭代器转换成列表等数据结构后再使用5.6.2map()与filter()111filter(函数名,可迭代对象)filter()筛选偶数5.6.2map()与filter()112defis_e

温馨提示

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

评论

0/150

提交评论