1.装饰器
1.1介绍
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
代码遵循开放封闭原则
封闭:对实现的功能代码块
开放:对扩展开发
1.2.装饰器的使用
1.本来f1指向的是 f1这个对象,然后 调用ww(f1)这个函数返回的是inner这个对象,f1被重新指向 inner这个对象,f1() 就是调用inner()这个方法,func()就是调用的f1()这个方法。
1.3 装饰器带参数
其实这时候 test 指向了func_in
1.4 通用的装饰器
1.5 带参数的装饰器
先调用最外层的func_out()函数 然后指向 func ,然后再是 test1=func(test1),就和之前是一样的了。
1.6 作用域
LEGB 原则
locals -> enclosing function -> globals -> builtins
局部变量———闭包空间———全局变量———内建模块(dir(_ builtin _) )
Python 在启动的时候会自动为我们载⼊很多内建的函数、类,
例如 dict,list,type,print,这些都位于 builtin 模块中可以使用 dir(_ builtin _) 来查看。
a= 1 # 全局变量 globals
def func():
a=2 # 闭包变量 enclosing
def inner_fun():
a= 3 # 局部变量 locals
print("a=%d"%a)
return inner_fun
ff=func()
ff()