装饰器是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