目录

1. 闭包

2 装饰器(重点,难点)

2.1 装饰器写法

2.2使⽤@语法糖将装饰器应⽤到指定函数上,简化使⽤

2.3 带有不定⻓参数的装饰器

2.4 多个装饰器作⽤在⼀个函数上(不重要)

3.递归函数(不是重点)

3.1 嵌套调⽤

3.2 递归调⽤

3.3 递归调⽤过程

3.4 递归适⽤条件

作业

用装饰器补充:将信息保存到文件​


1. 闭包

我们可以在⼀个函数中再定义⼀个函数,在函数内部定义的函数称之为内部函数,内部函数只能在函数内使⽤,不会污染外部空间。定义内部函数的函数称之为外部函数,这样的定义构成函数的嵌套

  • 内部函数只能在外部函数⾥调⽤,外界⽆法直接调⽤内部函数

在⼀个外部函数中定义了⼀个内部函数,内部函数⾥引⽤了外部函数的变量,并且外部函数的返回值是内函数的引⽤。这样内部函数和其执⾏所需的环境变量就构成了⼀个闭包

⼀般情况下,如果⼀个函数结束,函数的内部所有东⻄都会释放掉,局部变量都会消失。但是闭包是⼀种特殊情况,如果外函数在结束的时候发现有⾃⼰的局部变量将来会在内部函数中⽤到,就把这个局部变量绑定给了内部函数,然后⾃⼰再结束。

在闭包中⽆法直接修改外部变量x的值

在python3中可以通过nonlocal关键字声明⼀下x,表示这个变量不是局部变量,需要向上⼀层变量空间找这个变量。

2 装饰器(重点,难点)

软件开发中有⼀条⾮常重要的规则就是:对修改封闭,对扩展开放。 对于⼀个现有的函数,如果想要增强此函数的功能,但是不允许修改此函数源代码的时候,使⽤装饰器来解决这个问题

  • 本质:就是⼀个闭包,还是⼀个返回函数的⾼阶函数
  • 好处:就是在不⽤修改原函数代码的前提下给函数增加新的功能

2.1 装饰器写法

2.2使⽤@语法糖将装饰器应⽤到指定函数上,简化使⽤

2.3 带有不定⻓参数的装饰器

同⼀个装饰器可以应⽤于多个函数

2.4 多个装饰器作⽤在⼀个函数上(不重要)

3.递归函数(不是重点)

3.1 嵌套调⽤

在函数A中可以调⽤函数B,在函数B中可以调⽤函数C,这种调⽤⽅式称为函数的嵌套调⽤。

3.2 递归调⽤

⼀个函数直接或间接的调⽤⾃⼰则称为递归调⽤。

3.3 递归调⽤过程

递归调⽤可分解为两个过程,正向递归调⽤和逆向递归返回。

3.4 递归适⽤条件

如果⼀个问题规模缩减后,求解⽅式和原来⼀样,⼩规模问题解决后导致问题的最终解决,则可适⽤递归

  • 形式是递归的 阶乘和斐波那契数列
  • 结构是递归的 列表遍历
  • 解法是递归的 汉诺塔

递归的写法:

  • ⼀个递归程序必须包含两部分:

1) 递归终⽌条件
     2) 递归调⽤⾃⼰

作业

1.有五个学⽣坐在⼀起,问第五个⼈多少岁?答⽐第四个⼤2岁,第四个⼈说它⽐第三个⼈⼤2岁, ,...第⼀个⼈说他10岁。请写⼀个递归函数计算第5个学⽣多少岁(递归实现)

2.某班期末考试科⽬为数学和计算机,有最多不超过30⼈参加考试。学⽣的信息包括学号、姓名。考试后要求:

(1)计算每个学⽣的总分和平均分;

(2)按总分成绩由⾼到低排出成绩的名次;

(3)打印出名次表,表格内包括学⽣姓名、学号、各科分数、总分和平均分;

(4)任意输⼊⼀个学号,能够查找出该学⽣在班级中的排名及其考试分数
编写要求:

(1) 要对⽤户输⼊进⾏验证,如果输⼊的不是0-4显示错误,然后继续输⼊

(2) 要能够连续不断的进⾏选择

(3) 每⼀项功能都要封装函数完成,函数单独放到⼀个模块中

(4) 菜单及其⽤户选择的处理放到主模块中。
(5) 学⽣数据保存到⽂件

用装饰器补充:将信息保存到文件

闭包、装饰器与递归_月隐学python第12课相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 类成员_月隐学python第17课

    目录 1.类成员 2 实例成员的动态绑定 3. 系统魔术⽅法 3.1 __init__ 和 __new__ 3.2 算数运算符重载 3.3 迭代器 3.4 __call__ 4.单例设计模式 4.1. ...

  3. 继承_月隐学python第16课

    目录 1.封装 1.1 属性私有化 1.2 属性装饰器 1.3 成员⽅法私有化 2.继承 2.1 单继承 2.2 多继承(理解.了解) 3.类成员 作业 初级 中级 ⾯向对象三⼤特征:封装.继承.多态 ...

  4. 列表_月隐学python第6课

    在python中,有这样一些类型,它们的成员是有序排列的,并且可以通过下标访问成员,这些类型称之为有序序列,包括:列表.元组和字符串:其中列表的成员可修改,属于可变序列,字符串和元组,成员不可修改,属 ...

  5. 函数进阶_月隐学python第11课

    目录 1.函数类型 2. 匿名函数 3.传入函数(理解) 4.闭包 5.偏函数 6.变量的作用域 6.1 变量作用域的分类 6.2 变量作⽤域查找规则 6.3 全局变量和局部变量 6.4 global ...

  6. mysql高级之子查询,多表查询,外连接,集合操作,内部函数与数据控制_月隐学python第24课

    目录 ⼀.⾼级 1.1 ⼦查询 1.2 多表查询 1.3 外连接 1.4 集合操作 1.5 内部函数 ⼆.数据控制 2.1 事务 2.2 授权管理 ⼀.⾼级 1.1 ⼦查询 ⼦查询嵌⼊到其他查询语句中 ...

  7. mysql基础_月隐学python第22课

    目录 ⼀.数据库基本概念 常⻅的数据库: MySQL简介 mysql的安装 linux下 windows下安装 ⼆. SQL 三.操作数据库 四.数据库表 例子: 五.数据类型 数值型 字符型​ ⽇期 ...

  8. 正则表达式_月隐学python第20课

    目录 1.为什么使⽤正则表达式 2.正则表达式的组成 3.正则常⽤⽅法 3.1  re.match()​ 3.2  re.search()​ 3.3  re.findall()​ 3.4  re.sp ...

  9. 字典与集合_月隐学python第8课

    一.字典 字典属于无序列,元素存放无序,是通过哈希方式进行数据存取的,字典是一个可变容器,字典中保存一个的键值对: key : value.我们通过key来获取对应的值,很类似我们的汉语字典. 字典中 ...

最新文章

  1. 专题 7 设备文件编程
  2. anaconda双版本完美并存
  3. Spring注解@Import详细使用说明
  4. 俄罗斯方块剖析之一总体计划
  5. linux-basic(7)linux文件与目录管理
  6. suse glibcxx版本过高问题
  7. 怎样进入pe重建硬盘
  8. oracle中常用的时间格式转换
  9. java8 stringbuilder_有了Java8的“+”真的可以不要StringBuilder了吗
  10. opencv 人脸识别_python基于openCV人脸识别18行代码实现
  11. USB接口的TP概率性不工作需重启才恢复问题定位
  12. 【hashcat help中文注释】
  13. Verilog中begin...end和fork....join的区别和用法
  14. 德普图拉在北京香山AI分论坛的主持词
  15. MES系统质量追溯功能,到底在追什么?
  16. python opencv 读取mov文件
  17. 微信修改基本配置信息
  18. 读完这篇文章,颠覆你之前对硬盘开盘的认知!
  19. java中用于定义小数的关键字_Java 中用于定义小数的关键字有两个:( ) 和 ( )。_学小易找答案...
  20. 使用pycharm去掉表格中的重复数据

热门文章

  1. when is SAP UI5 formatter called
  2. Shell openSomething - how is application component loaded in the runtime
  3. SAP CRM product customizing下载的第二个队列
  4. Equipment download - generic inbound 和mapping处理逻辑分析
  5. Product API buffer
  6. 案例分析: SAP BRF+ rule不工作的原因
  7. 获得ABAP report里定义的所有变量及type - GET_GLOBAL_SYMBOLS
  8. Coverage analysis in ABAP in Eclipse
  9. SAP CRM调查问卷的评分和图表显示功能介绍 1
  10. 方舟手游服务器设置文件翻译,方舟生存进化手游界面翻译 方舟生存进化手机版中文对照翻译一览...