天天看点

Python Decorator Closure

最近在看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

下一篇: struts标签