Python装饰器的本质
Python的装饰器本质上是一个嵌套函数,它接受被装饰的函数(func)作为参数,并返回一个包装过的函数。这样我们可以在不改变被装饰函数的代码的情况下给被装饰函数或程序添加新的功能。Python的装饰器广泛应用于缓存、权限校验(如django中的@login_required和@permission_required装饰器)、性能测试(比如统计一段程序的运行时间)和插入日志等应用场景。有了装饰器,我们就可以抽离出大量与函数功能本身无关的代码,增加一个函数的重用性。
修饰器(decorator)的作用:给被修饰的函数进行预处理。在函数前、后做特定操作。简单来说,装饰器就是实现了一个通用的功能,避在不同函数上反复写相同的代码。
from time import time
def timer(func):
def f(x, y=10):
before = time()
rv = func(x, y)
after = time()
print('time taken: ', after - before)
return rv
return f
@timer
def add(x, y=10):
return x + y
@timer
def sub(x, y=10):
return x - y
print('add(10)', add(10))
from time import time
def timer(func):
def f(*args, **kwargs):
before = time()
rv = func(*args, **kwargs)
after = time()
print('time taken: ', after - before)
return rv
return f
@timer
def add(x, y=10):
return x + y
@timer
def sub(x, y=10):
return x - y
print('add("a", "b")', add("a", "b"))
print('add(10)', add(10))