装饰器
讲装饰器前 先说引用
函数作为参数和返回值不用加 括号,加了括号就是函数的调用
闭包函数
就是在函数的内部 定义了一个函数 并且这个函数用到了外面这个函数的变量
那么这个函数以及用到的一些变量称之为闭包
例子:
def hi():
return "hi yasoob!"
def doSomethingBeforeHi(func):
print("I am doing some boring work before executing hi()")
print(func())
doSomethingBeforeHi(hi)
#outputs:I am doing some boring work before executing hi()
# hi yasoob!
代码来源:https://www.runoob.com/w3cnote/python-func-decorators.html
nonlocal 声明局部变量
LEGB原则
L = local 本地作用域 就是局部变量
E = Enclosure 闭包所在作用域
G = Global 全局变量
B = built-in 内置
开放封闭原则,
已经实现的原则不允许被修改,可以被扩展
装饰器的使用:
def wrapper(func):
print('进入装饰器')
def inner():
print('真正执行装饰')
func()
print('装饰已经完成')
return inner
@wrapper
def info():
print('这是被装饰的函数')
print('#######通过装饰器调用#########')
info()
###########去掉@wrapper进行装饰#############
# ret = wrapper(info)
# ret()