Day 12 闭包函数,装饰器

闭包函数

回顾:
1.函数对象:可以将定义在函数内的函数返回到全局使用.从而打破了函数层级限制
2.名称空间与作用域:作用域关系在函数定义阶段时就已经固定死了,与调用位置无关,即在任意位置调用函数都需要跑到定义函数时找到作用域的关系
定义:闭包其实就是函数内部的函数,并且这个内部函数对外部作用域而不是全局作用域的变量的引用,闭包是指:函数内部函数对外部作用域而不是全局作用域的引用

  • 两种为函数传参的方式
    1.使用参数的形式
    2.包给函数:包给函数就是两个函数套在一起.
  • 闭包函数的应用
    闭包的意义:返回的函数对象,不仅仅是一个函数对象,在该函数外还包裹了一层作用域,这使得,该函数无论在何处调用,优先使用自己外层包裹的作用域。

应用领域:延迟计算(原来我们是传参,现在我们是包起来)、爬虫领域。

装饰器

1.什么是装饰器
假如有一个函数,我们在不修改这个函数的基础上来扩展它的功能,这个时候就用到了装饰器,所以装饰器值得是为被装饰器对象添加额外的功能,因此定义装饰器就是定义一个函数,只不过该函数的功能是用来为其他函数添加额外的功能

  • 装饰器本身其实是可以任意可调用的对象
  • 被装饰的对象也可以是任意可调用的对象

2.为什么要用装饰器
因为,如果现在已经有一个上线了的项目,我们想修改某个方法,但这个方法可能有很多地方都用到,改不好容易发生问题,所以,这个时候用装饰器就可以了,,在不改变该方法的基础上还可以扩展其他功能,并且不影响原来的方法调用.
装饰器的实现必须遵循两大原则:
1.不修改被装饰对象的源代码
2.不修改被装饰对象的调用方式
所以,装饰器其实就是在遵循以上两个原则的前提下为被装饰对象添加新功能

3.装饰器语法糖
是在被装饰函数的正上方,并且是单独一行写上 @装饰器名
4.装饰器模板

def deco(func):
    def wrapper(*args,**kwargs):
        res = func(*args,**kwargs)
        return res
    return wrapper

5有参装饰器

6.三层闭包

猜你喜欢

转载自www.cnblogs.com/bladecheng/p/10957015.html