装饰器是Python的特性,采用了闭包的思想,使用得当可简化代码,提高可读性。
装饰器的特点是只运行一次,就是说不能动态添加装饰器,只能在需要装饰的方法上手动添加装饰器。
下面举个简单的例子
import datetime
def logtime(f):
def setf(*args, **kw):
print(datetime.datetime.now())
return f(*args, **kw)
return setf
@logtime
def f():
print("i am f")
f()
输出:
2019-05-23 17:03:37.415021
i am f
上面的例子是一层闭包,下面介绍下两层闭包
两层闭包就是在闭包再嵌套一个闭包
import datetime
def logtime(time):
print(time)
def _logtime(f):
def setf(*args, **kw):
print(datetime.datetime.now())
return f(*args, **kw)
return setf
return _logtime
@logtime("2019年5月23日")
def f():
print("i am f")
f()
f()
输出:
2019年5月23日
2019-05-23 17:13:43.106003
i am f
2019-05-23 17:13:43.106223
i am f