闭包 装饰器

函数的引用,即为函数名不加括号,打印的时候返回函数对象地址

1.闭包(closure)
在外部函数中定义了一个内部函数(内部函数是闭包),并且内部函数能够读取到外部函数内的变量,这种函数我们就称为闭包

 def outer(x):
        def inner(y):
            print(x+y)
        return inner

outer()() ,结果是x+y
特性:
1)内部函数中对外部函数的变量引用
2)闭包无法修改外部函数的局部变量
3)闭包可以保存当前的运行环境(外部函数的变量/参数)

2.装饰器

装饰器本质就是闭包
装饰器作用:在不改变函数原有代码的基础上,添加额外的功能
引用方式

   def gettime(func):
        def inner(y):
            begin = time.time()
            func()
            end = time.time()
        return inner
  

   @gettime
   def test(self):  #gettime(test),test就是参数func
        pass

装饰器的应用场景:引入日志、函数执行时间统计、执行函数前预备处理、执行函数后清理功能、权限校验等场景、缓存、事务处理、数据清理、数据添加、附加功能等

python三种内置装饰器: @staticmethod、@classmethod 和 @property