




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
函数本讲目标函数简介函数参数函数式编程函数简介函数也是一个对象对象是内容中专门用来存储数据的一块区域函数可以用来保存一些可执行的代码,并且可以在需要时,对这些语句进行多次的调用创建函数
函数名命名规范可以包含字母、数字、下划线、但是不能以数字开头
def函数名([形参1,形参2,...形参n]):代码块调用函数函数对象()函数中保存的代码不会立即执行,需要调用函数代码才会执行
案例定义函数#定义一个函数deffn():print('这是我的第一个函数!')print('hello')#调用函数fn()函数参数在定义函数时,可以在函数名后的()中定义数量不等的形参,多个形参之间使用,隔开形参(形式参数),定义形参就相当于在函数内部声明了变量,但是并不赋值实参(实际参数)
如果函数定义时,指定了形参,那么在调用函数时也必须传递实参,
实参将会赋值给对应的形参,简单来说,有几个形参就得传几个实参案例带参函数#定义函数时指定形参deffn(a,b): print(a,"+",b,"=",a+b)#调用函数fn(10,20)案例带参函数-带默认值#定义一个函数#定义形参时,可以为形参指定默认值#指定了默认值以后,如果用户传递了参数则默认值没有任何作用#如果用户没有传递,则默认值就会生效deffn(a=5,b=10,c=20):print('a=',a)print('b=',b)print('c=',c)实参的传递方式-按位置传参#实参的传递方式#位置参数#位置参数就是将对应位置的实参复制给对应位置的形参#第一个实参赋值给第一个形参,第二个实参赋值给第二个形参。。。fn(1,2,3)实参的传递方式-按名称传参#关键字参数#关键字参数,可以不按照形参定义的顺序去传递,而直接根据参数名去传递参数fn(b=1,c=2,a=3)#位置参数和关键字参数可以混合使用#混合使用关键字和位置参数时,必须将位置参数写到前面fn(1,c=30)练习-练习1:定义一个函数,可以用来求任意三个数的乘积-练习2:定义一个函数,可以根据不同的用户名显示不同的欢迎信息
函数式编程
在Python中,函数是一等对象一等对象一般都会具有如下特点:
①对象是在运行时创建的②能赋值给变量或作为数据结构中的元素③能作为参数传递④能作为返回值返回
高阶函数高阶函数至少要符合以下两个特点中的一个①接收一个或多个函数作为参数②将函数作为返回值返回函数的参数-不定长参数一#在定义函数时,可以在形参前边加上一个*,这样这个形参将会获取到所有的实参#它将会将所有的实参保存到一个元组中#*形参只能接收位置参数,而不能接收关键字参数deffn(*a):print("a=",a,type(a))#定义一个函数,可以求任意个数字的和defsum(*nums):#定义一个变量,来保存结果
result=0#遍历元组,并将元组中的数进行累加
forninnums:result+=nprint(result)函数的参数-不定长参数二#带星号的形参只能有一个#带星号的参数,可以和其他参数配合使用#第一个参数给a,第二个参数给b,剩下的都保存到c的元组中deffn(a,b,*c):print('a=',a)print('b=',b)print('c=',c)fn(1,2,3,4,5)函数的参数-不定长参数三#可变参数不是必须写在最后,但是注意,带*的参数后的所有参数,必须以关键字参数的形式传递#第一个参数给a,剩下的位置参数给b的元组,c必须使用关键字参数deffn(a,*b,c):print('a=',a)print('b=',b)print('c=',c)#所有的位置参数都给a,b和c必须使用关键字参数deffn2(*a,b,c):print('a=',a)print('b=',b)print('c=',c)函数的参数-不定长参数四#如果在形参的开头直接定一个*,则要求所有的参数必须以参数名称的形式传递deffn(*,a,b,c): print('a=',a) print('b=',b) print('c=',c)fn(a=30,b=40,c=50)函数的参数-不定长参数**#**形参可以接受其他关键字参数,会将参数保存到一个字典中#字典的key就是参数的名字,字典的value就是参数的值#**只能有一个,并且必须写到参数的最后deffn(b,c,**a): print('a=',a,type(a)) print('b=',b) print('c=',c)fn(10,20,d=1,e=2)#按位置fn(a=1,d=2,e=3,b=10,c=20)#按名称参数的解包#参数的解包(拆包)deffn(a,b,c): print('a=',a) print('b=',b) print('c=',c)#创建一个元组或集合作为参数t=(10,20,30)t={1,2,3}#传递实参数,序列类型的参数前加*,这样序列中的元素依次作为参数传递#这里要求序列中的元素个数必须和形参个数一致#fn(*t)#普通传递#fn((1,2,3),10,20)#创建字典作为参数d={'a':100,'b':200,'c':300}#fn(**d)函数的返回值#函数返回值returndeffn(*nums): result=0 forninnums: result+=n print(result)#fn(100,200,300)#如果函数中写多个return,只会执行第一个return,后面代码不执行deffn(): #return'Hello' #return'dd' return[1,2,3]文档字符串#help()是python中的内置函数#通过help()函数可以查询Python中的函数用法#语法help(函数对象)如help(print)#help(print)deffn(a:int,b:bool,c:str='hello')->int: '''
这是函数说明
''' return10
help(fn)作用域#在Python中一共有两种作用域# 全局作用域# -全局作用域在程序执行时创建,在程序执行结束时销毁# -所有函数以外的区域都是全局作用域# -在全局作用域中定义的变量,都属于全局变量,可以在程序的任意位置访问## 函数作用域# -函数作用域在函数调用时创建,在调用结束时销毁# -函数每调用一次就会产生一个新的函数作用域# -在函数作用域中定义的变量,都是局部变量,只能在函数内部访问## 变量的查找# -使用变量时,会优先在当前作用域中查找,如果没有,再上一级作用域中查找案例作用域#函数内部定义新的函数deffn2(): deffn3(): print('fn3中:','a=',a) fn3()#a=20#fn2()#执行结果a=20deffn3(): a=10 #局部变量
print('fn3函数内部:','a=',a)deffn4(): globala#表示当前变量为使用定义好的全局变量
a=50 #此时相当于修改全局变量
print('fn4','a=',a)fn4()递归#创建一个函数,用来求任意数的阶乘#普通函数使用循环实现,编写简单,阅读稍难deffn(n): '''
该函数用来求任意数的阶乘 参数: n要求阶乘的数字
''' result=n foriinrange(1,n): result*=i returnresult#n=fn(3)#print(n)递归#创建一个函数,用来求任意数的阶乘#递归函数编写难,阅读方便#递归式函数的两个要件# 1.基线条件# -问题可以被分解为的最小问题,当满足基线条件时,递归就不再执行了# 2.递归条件# -问题可以继续分解的条件deffn(n): ifn==1: return1 returnn*fn(n-1)#print(fn(3))递归案例回文数defhui_wen(s): iflen(s)<2: returnTrue elifs[0]!=s[-1]: returnFalse returns[0]==s[-1]andhui_wen(s[1:-1])print(hui_wen('12321'))高阶函数#高阶函数#接收函数作为参数,或者将函数作为返回值的函数是高阶函数#当我们使用一个函数作为参数时实际上是将指定的代码传递进了目标函数高阶函数案例#需求取出列表中所有的偶数并返回#定义一个函数,判断一个任意的数字是否是偶数deffn2(i): ifi%2==0: returnTrue returnFalsedeffn(fnc,lst): new_list=[] forninlst: iffnc(n): new_list.append(n) returnnew_list #print(fn(fn2,l))闭包#闭包#将函数作为返回值返回,也是一种高阶函数(了解)#这种高阶函数也称为闭包,通过闭包可以创建一些当前函数能访问的变量#可以将一些私有的数据藏到闭包中deffn(): a=10 definner(): print('a=',a) print('我是内部函数') returninner#r是一个函数,是调用fn()后返回的函数#这个函数是在fn()内部定义,并不是全局函数#所以这个函数总是能访问到fn()函数内的变量#r=fn();#r();闭包#闭包使用案例#形成闭包的条件#1.函数嵌套#2.将内部函数作为返回值#3.内部函数必须要使用到外部函数的变量闭包案例-求多个数的平均值defmake_average(): nums=[] defaverage(n
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 在线湿热灭菌工艺中盲管与生物指示剂安装的关键影响及优化策略探究
- 住宅借款抵押合同5篇
- 天台圆管涵施工方案
- 陇南通风设备施工方案
- 涂料工施工方案
- 毕节机场地坪施工方案
- 宁夏污水池聚脲施工方案
- 底板施工缝施工方案
- 曲阳白色胶粘石施工方案
- 小门垛砌筑施工方案范本
- 《ESPEN重症病人营养指南(2023版)》解读课件
- 初三学习策略模板
- 外销合同协议书英文翻译
- 灌区续建配套与节水改造规划报告
- 财务咨询外包协议
- 2023-2024学年上海市杨浦区六年级上学期期中考试语文试卷含详解
- 农行超级柜台业务知识考试题库(含答案)
- 新标准大学英语(第三版)综合教程3(智慧版)课件 Unit6 Path to prosperity
- 3认识你自己-大学生自我意识发展课件
- 中药学全套(完整版)课件
- GB 1886.232-2016食品安全国家标准食品添加剂羧甲基纤维素钠
评论
0/150
提交评论