闭包函数,和装饰器

闭包函数

内部函数包含对外部作用域而非全剧作用域名字的引用,
该内部函数称为闭包函数

给函数体传值的两种方式

  • 传参

    • 位置传参和关键字传参

  • 闭包

    • 闭包函数相当于 用函数将函数封装; 
      闭包的方式其实是在函数内通过返回值的方式将函数名称返回;
      然后通过调用函数名称的方式来调用函数

装饰器

定义

  • 器:就是一个工具 装饰:给被装饰对象添加新的功能

必须遵循两个原则

  • 1.不改变被装饰对象源代码

  • 2.不改变被装饰对象(可调用对象)调用方式

开放封闭原则:

  • 开放:对扩展开放 封闭:对修改封闭

基本模板

无参模板

  • 理解:封装过程中其实是将inner赋给被修饰函数了;
    所以传参的需求,可以写在inner的括号内;
    且要在最内层函数处 写变量名 用来接收

有参模板

  • 就是再包一层函数, 然后将装饰器需要传入的参数写在最外层函数的形参位置 位置传参和关键字传参都行

  • 装饰器的有参无参,是针对装饰器内是否有参数的,而不是针对被修饰函数是否有参数

补充知识点
统计函数运行时间

爬虫

  • 理解:通过方法获取html页面数据 方法:import requests中的request.get(url)

装饰器修复技术

如果没使用@wraps(func)

1、那调用被装饰的函数,返回的事内层函数

2、A.name返回的会是A函数的名称

装饰器嵌套

先写一个被装饰函数和两个闭包函数

然后按先要执行功能的顺序写两次语法糖, 通过语法糖的返回值传递的方式 两个功能就顺序执行了

装饰器语法糖:

会将紧挨着它的可调用对象的名字当做参数自动传入调用装饰器
语法糖在书写的时候应该与被装饰对象紧紧挨着 
两者之间 不要 有空格

执行原则:

  • 装饰器在装饰的时候 顺序从下往上
    装饰器在执行的时候 顺序从上往下

理解:将最近的一个可调用对象传到装饰器

 

原文地址:https://www.cnblogs.com/buzaiyicheng/p/11176121.html