1.高阶函数
-
接受函数作为参数,或者将函数作为返回值返回的函数就是高阶函数
image.png
image.png
2.匿名函数
image.png
3.闭包
- 将函数作为返回值也是高阶函数我们称之为闭包
- 闭包的好处
。通过闭包可以创建一些只有当前函数能访问的变量
。可以将一些私有数据藏到闭包中 -
形成闭包的条件
。函数嵌套
。将内部函数作为返回值返回
。内部函数必须要使用到外部函数的变量
image.png
image.png
image.png
4.装饰器的引入
- 我们可以直接通过修改函数中的代码来完成需求,但是会产生以下一些问题
。如果修改的函数多,修改起来会比较麻烦
。不方便后期的维护
。这样做会违反开闭原则(ocp)-
程序的设计 ,要求开发对程序的拓展,要关闭对程序的修改
image.png
image.png
-
5.装饰器的使用
- 通过装饰器,可以在不修改原来函数的情况下来对函数进行拓展
-
在开发中,我们都是通过装饰器来拓展函数功能的
image.png
image.png
6.作业
'''
汉诺塔游戏,现在有ABC三根柱子。要求:将A柱所有的圆盘放到C柱。在移动的过程中可以借助B柱。并且规定大圆盘不能放小圆盘上面,每次只能移动一个盘子。用递归的方式来解决汉诺塔问题
通过观察
1.如果只有一个盘子 A -> C
2.如果有 大于等于2个盘子的情况下 我们总可以把它们看成是2个盘子,一个是最下面的最大的盘子,另一个是最下面盘子上面的多个盘子或者(1个盘子)
2.1 先把最上面的一个或者多个盘子放到B柱 A -> B
2.2 把最下面的盘子从 A -> C
2.3 把B柱上面的一个或多个盘子放到C柱 B -> C
'''
定义一个函数 来解决汉诺塔问题
def hannuoTower(num,a,b,c):
# 参数 num 代表的是盘子 a b c 分别代表的是 A柱 B柱 C柱
# 1.基线条件
if num == 1:
print('第 1 个盘从',a,'->',c)
# 2.递归条件
else:
# n >= 2的情况下
# 2.1 先把最上面的一个或者多个盘子放到B柱 A -> B 借助到C num-1代表除了最下面的盘子
hannuoTower(num-1,a,c,b)
# 2.2 把最下面的盘子从 A -> C
print('第',num,'个盘从',a,'->',c)
# 2.3 把B柱上面的一个或多个盘子放到C柱 B -> C 可能借助到A
hannuoTower(num-1,b,a,c)
hannuoTower(3,'A','B','C')