装饰器=高阶函数+函数嵌套+函数闭包
高阶函数
接受函数作为参数,或者把函数作为结果返回的函数就是高阶函数
函数嵌套
在函数内定义函数
闭包
内部的函数代码包含对外部的作用域的引用,但不一定是对全局作用域的引用,能访问定义体之外的非全局变量
装饰器是可以调用的对象,其参数是另一个函数(被修饰),装饰器会处理被装饰的函数,然后将它返回,或者将其替换成另外的一个函数或者可调用对象。
通常把函数替换成另外一个函数,注意:函数装饰器在导入模块时立刻执行如下:
变量作用域规则
全局变量 局部变量 自由变量(闭包)
如果想在函数中赋值时想让b作为全局变量,则利用用global声明:
nonlocal 将变量标记为自由变量,即使在函数变量重新赋值了,也会变为自由变量,
以下为装饰器的实例操作: