python装饰器


装饰器是一种修改函数的便捷方式,可以在不改变原函数代码的情况下给函数增加一些新功能,例如日志记录,性能测试等。

1 两层装饰器:

1 def log(func):
2     @functools.wraps(func)
3     def wrapper(*args, **kw):
4         print('call %s():' % func.__name__)
5         print('begin on {}'.format(time.time()))
6         func(*args, **kw)
7         print('end on {}'.format(time.time()))
8     return wrapper

其中functools.wraps是将原函数的属性拷贝到装饰器返回的函数里

2三层装饰器:

1 def log_3(text):
2     def decorator(func):
3         @functools.wraps(func)
4         def wrapper(*args, **kw):
5             print('%s %s():' % (text, func.__name__))
6             return func(*args, **kw)
7         return wrapper
8     return decorator

当需要向装饰器传递参数时就需要用到三层装饰器