一、高阶函数定义
-
定义:接收函数作为参数,或者将函数作为返回值返回的函数就是⾼阶函数!
eg1.
当我们使用一个函数作为参数时,实际上就是将一段代码传递到目标函数
eg.
二、匿名函数
-
1、filter(参数1,参数2)函数,可以从序列中过滤出符合条件的元素,并保存到一个新的序列中。
参数1:函数,根据该函数来过滤序列;
参数2:需要过滤的序列;
返回值:过滤后的新的序列。print(xxx(filter(参数1,参数2)))
eg.
-
2、lambda()函数
表达式专门用来创建一些简单的函数,他是函数的另一种创建方式。
语法结构:
lambda+参数列表:+返回值
eg.
三、闭包
定义:将函数作为返回值返回,也是⾼阶函数我们也称为闭包。
-
闭包的好处:
1、通过闭包可以创建⼀些只有当前函数能访问的变量。
2、可以将⼀些私有数据藏到闭包中。防止别人错误的修改变量导致覆盖全局变量等情况发生。
3、不希望别人修改程序,安全性高!
eg.
由上图程序可知⾏成闭包的条件:
1、函数嵌套
2、将内部函数作为返回值返回
3、内部函数必须要使⽤到外部函数的变量!
四、装饰器
4.1 装饰器的引入
-
我们可以直接通过修改函数中的代码来完成需求,但是会产⽣以下⼀些问题:
1、如果修改的函数多,修改起来会⽐较麻烦;
2、不⽅便后期的维护;
3、这样做会违反开闭原则(ocp),程序的设计,要求开发对程序的扩展,要关闭对程序的修改。
eg.
4.2 装饰器的使用
- 对谁拓展,就要调用谁(而且某些函数需要传参数),会形成一个新的函数(即对旧函数的扩展)!!!
eg.
通过装饰器,可以在不修改原来函数的情况下来对函数进⾏扩展。在开发中,我们都是通过装饰器来扩展函数的功能的!!!
eg.
- *args为接收所有位置参数,**kwargs为接收所有关键字参数