最近在看fp相关, 看到closure, 想起这个... python的装饰器方法是用闭包实现的
closure是什么就不解释了, 可以看上面第一个blog
装饰器, 经典的设计模式, 动态地给一个对象添加一些额外的职责.
大家在写代码的时候, 除了核心的逻辑, 往往还有许多辅助的逻辑, 比如, log, try catch, lock, time计时, 等等...
如果都混在一起, 严重影响代码的整洁度, 比如log或try catch这种需要随处加的, 非常影响开发效率, 和可读性
而装饰器最大的应用, 就是将核心代码和辅助代码分离.
以time为例,大家在测performance的时候会在自己代码里面加上大量的这样的代码, 非常烦...
python这种动态语言, function也是first-class, 所以简单改进如下, 虽然简单, 但是这已经属于装饰器设计模式
这种改动的问题在于, 你想想这种performance代码都是临时加上的, 如果每次都需要修改函数名来测时间, 相当麻烦
装饰器方法的python语法糖,@
@timeit,在定义上加上这一行与另外写foo = timeit(foo)完全等价
python中内嵌的装饰器方法, 分别是staticmethod、classmethod和property