装饰器基础知识
装饰器是一种可调用对象,其参数是另一个函数(被装饰的函数)。装饰器可能会对被装饰的函数做些处理,然后返回函数,或者把函数替换成另一个函数或可调用对象。
假如有一个名为decorate
的装饰器:
@decorate
def target():
print("running target()")
以下写法与上面的效果一样。
def target():
print('running target()')
target = decorate(target)
两种写法的最终结果一样:上面两个代码片段执行完毕后,target
名称都会绑定decorate(target)
返回的函数--可能是原来那个名为target
的函数,也可能是另一个函数。
示例9-1 装饰器通常会把一个函数替换成另一个函数
严格来说,装饰器只是语法糖。如前所述,装饰器可以像常规的可调用对象那样调用,传入另一个函数。有时,这样做其实更方便,尤其是做元编程(在运行时改变程序的行为)时。
综上所述,装饰器有以下3个基本性质:
- 装饰器是一个函数或其他可调用对象
- 装饰器可以把被装饰的函数替换成别的函数
- 装饰器在加载模块时立即执行
Python
何时执行装饰器
装饰器的一个关键性质是,它们在被装饰的函数定义之后立即执行。这通常是在导入时(例如,当python加载模块时)。
示例9-2 registration.py
模块
把registration.py
当做脚本运行,得到的输出如下所示。
标签:闭包,__,函数,示例,python,clock,--,装饰,def From: https://www.cnblogs.com/bonne-chance/p/18237734