1. 高阶函数
特点:
1.接受一个或多个函数作为参数。
2.将函数作为返回值
如下图,几行取出列表中偶数的代码,由于fun1()函数接收了fun()函数作为参数,因此这是高阶函数
匿名函数(lambda函数)
当函数的功能非常单一时,可以不用给函数起名字,节省命名空间
lambda()函数就是专门用来创建一些简单的函数
创建的函数在使用后就会销毁
语法: lambda 参数:表达式
如下使用lambda函数直接打印两数之和
也可以使用参数接受之后再打印
filter()函数
需要两个参数,按照设定的规则,过滤出想要的数据
1,传递一个函数
2.传递一个需要过滤的序列(可迭代的)
如下,filter将list1中的数据通过对应的匿名函数筛选出偶数
2.闭包
将函数作为返回值也是高阶函数也称为闭包
闭包的好处
1.可以创建一些只有当前函数能访问的变量
2.可以将一些私有数据藏到闭包内
形成闭包的条件
1,函数嵌套
2,将内部函数作为返回值返回
3,内部函数必须要使用到外部函数的变量
图中的nonlocal的作用是告诉解释器,此处使用的是外部变量num1
本意是要修改外部变量的值,实际上是重新进行赋值
3.装饰器
装饰器的引入
装饰器本质上也是一个闭包,所以满足闭包的三个基本条件
1,函数嵌套
2,将内部函数作为返回值返回
3,内部函数必须要使用到外部函数的变量
我们可以直接通过修改函数中的代码来完成需求,但是会产⽣以下⼀些问题
如果修改的函数多,修改起来会⽐较麻烦
不⽅便后期的维护
这样做会违反开闭原则(ocp) 程序的设计,要求开发对程序的扩展,要关闭对程序的修改
4. 装饰器的使⽤
通过装饰器,可以在不修改原来函数的情况下来对函数进⾏扩展
在开发中,我们都是通过装饰器来扩展函数的功能的
@fun 等价于f = fun(fun1) 称为语法糖
作业