装饰器
简介
- 装饰器是python的一种语法糖,可以简洁的在函数加入操作。
函数中返回函数[1]
def decorator(a_func): |
- @符号是一个简短的方式来生成一个被装饰的函数
def decorator(a_func): |
- 我们运行如下代码会存在一个问题:
print(function.__name__) |
- 这并不是我们想要的!Ouput输出应该是"function"。这里的函数被warpTheFunction替代了。它重写了我们函数的名字和注释文档(docstring)。幸运的是Python提供给我们一个简单的函数来解决这个问题,那就是functools.wraps。我们修改上一个例子来使用functools.wraps:
from functools import wraps |
带参数的装饰器
- 在函数中嵌入装饰器:以日志为例,创建一个包裹函数,能让我们指定一个用于输出的日志文件。
from functools import wraps |
装饰器类
- 现在我们有了能用于正式环境的logit装饰器,但当我们的应用的某些部分还比较脆弱时,异常也许是需要更紧急关注的事情。比方说有时你只想打日志到一个文件。而有时你想把引起你注意的问题发送到一个email,同时也保留日志,留个记录。这是一个使用继承的场景,但目前为止我们只看到过用来构建装饰器的函数。
from functools import wraps |
- 这个实现有一个附加优势,在于比嵌套函数的方式更加整洁,而且包裹一个函数还是使用跟以前一样的语法:
|
