142
Python
Python装饰器是精通Python的第一道关卡!看大牛是怎么理解它的!
手写装饰器
现在我们要写一个函数:
def add(x, y=10):return x + y
然后我们想看看运行的结果,于是写了几个 print 语句:
代码马上变得很复杂。但最重要的是,我们得写一堆代码(复制粘贴),程序员是懒惰的,所以我们就想到一些更简单的方法,与其写这么多次,我们可以只写一次代码:
作为一个懒惰的程序员,我们立马就发现了,有一个 “模式” 反复出现,即执行一个函数,并计算这个函数的执行时间。于是我们就可以把这个模式抽象出来,用函数:
带参数的装饰器
我们知道下面两种代码是等价的:
@decdef func(...):...func = dec(func)
我们可以把它当成是纯文本的替换,于是可以是这样的:
类作为装饰器
如果说 Python 里一切都是对象的话,那函数怎么表示成对象呢?其实只需要一个类实现__call__ 方法即可。
小结
装饰器中还有一些其它的话题,例如装饰器中元信息的丢失,如何在类及类的方法上使用装饰器等。但本文里我们主要目的是简单介绍装饰器的原因及一般的使用方法,能用上的地方就大胆地用上吧!
最后更新:2017-10-09 02:30:15