Python学习十——函数下

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')

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容