在 python 程序中,装饰器就是一种闭包,它可以使闭包的访问方式更简单。本质上,装饰器(decorator)就是一个返回函数的高阶函数。所以,要定义一个 能打印日志的装饰器(decorator)。 在 Python 中使用装饰器,需要使用一个特殊的符号“@”来实现。在定义装饰器函数或类时,使用“@装饰器名称”的形式将符号“@”放在函数或类的定义行之前。
装饰器实现添加日志功能
import time
def writeLog(func):
try:
f=open('log.txt','a')
f.write(func.__name__)
f.write('t')
f.write(time.asctime())
f.write('n')
except Exception as e:
print(e.args)
finally:
f.close()
#不修改源代码的基础上,添加日志功能
def func_out(func):
def func_in():
#调用添加日志功能的方法
writeLog(func)
func()
return func_in
@func_out
def fun1():
print('功能 1')
@func_out
def fun2():
print('功能 2')
fun1()
fun2()
执行结果:
多个装饰器的使用
由上面的示例可以看到,如果给功能函数添加多个装饰器时候,离功能函数最近的先进行装饰。
通用的装饰器



