概述
第10节-函数三(高阶函数/匿名函数/闭包/装饰器)
- 一、高阶函数
- 二、匿名函数
- 1.过滤器
- 2.匿名函数(lambda函数)
- 三、闭包
- 四、装饰器
一、高阶函数
满足下列特点之一的函数称之为高阶函数:
特点1:接收一个或者多个函数作为参数
特点2:将函数作为返回值(不加括号)
注意:函数做形参和实参传参时,均不加括号
二、匿名函数
1.过滤器
filter():内嵌的过滤器函数,可以过滤一些可迭代的对象,返回fiter类型的对象(可以通过list强制转换为列表)
filter()的两个参数:filter(过滤的条件, 过滤的序列)—满足条件则留下
过滤条件:一般为lambda函数,两者配合使用
2.匿名函数(lambda函数)
也叫 lambda 函数,主要用来创建一些简单的函数
语法:lambda 参数,参数 : 表达式
lambda用完后自动销毁,不占用内存
三、闭包
行成闭包的3个条件:
(1) 函数嵌套
(2) 将内部函数作为返回值返回
(3) 内部函数必须要使用到外部函数的变量或“参数” (内部函数可以直接使用外部函数的参数)
为什么要用闭包 :
1.通过闭包可以创建一些只有当前函数能访问的变量
2. 可以将一些私有数据藏到闭包中
闭包的特性:使变量不被销毁,内存不被释放【涉及垃圾回收机制】
上图注释:
(1)当调用fn()时,(2)执行(3)不执行,因为return后面的代码不再执行
(2)当调用fn()()时,先执行fn()再执行内嵌的fn1(),因此先执行(2)再执行(1),(3)始终未被执行
四、装饰器
1、开闭原则(OCP)设计思想:要求开发对程序的扩展,要关闭对程序的修改
2、装饰器就是不违反OCP原则,对程序进行扩展,添加功能
装饰器相当于在函数内部进行外部函数的调用,主要是为不违反OCP原则而引入,避免在不同函数内部修改原函数代码
装饰器就是另类的闭包,给其他函数做扩展使用
上图注释:
(1)内嵌函数直接使用外部函数的参数(e,f),且要求名字必须一样
(2)外部函数作为参数add——>old
注释:从上面2个图可以看出,通过引入不定长参数,那么只需修改调用函数中的参数(fn或add),就能简单的改变装饰器的内容,而不用去修改原函数代码的参数(*args,**kwargs存在或删除)
3、装饰器的语法糖的一个写法
@扩展函数对象
定义被扩展的函数
被扩展函数调用
最后
以上就是可靠枕头为你收集整理的第10节-函数三(高阶函数/匿名函数/闭包/装饰器)的全部内容,希望文章能够帮你解决第10节-函数三(高阶函数/匿名函数/闭包/装饰器)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复