from functools import reduce
def log(f):
def fn(x):
print('call' + f.__name__+ '()...')
return f(x)
return fn
@log
def factorial(n):
return reduce(lambda x,y:x*y,range(1,n+1))
print(factorial(10))
运行结果如下:
装饰器的好处:可以极大地简化代码,在不改变原函数的基础上动态修改函数功能,避免每个函数写重复性代码,经常用于以下的方面:
1、打印日志 @log
2、检测性能 @performance
3、数据库事物 @transaction
4、URL路由 @post