装饰器
定义/作用
在不改变函数体的情况下, 对函数增加前置或后置逻辑.
** 装饰器的执行时间**
装饰器在函数定义后立即执行, 即模块导入时执行, 多个装饰器从上向下执行.
自定义装饰器
使用functools.wraps装饰器,
from functools import wraps
def wrapper(func):
"""定义装饰器的函数"""
@wraps(func)
def inner(*args, **kwargs):
"""内层函数"""
print("before func")
result = func(*args, **kwargs)
return result
print("after func")
return inner
@wrapper
def function(a):
"""被装饰函数"""
print("here is func, param is {}".format(a))
function()
相当于
function = wrapper(function)
如果不使用functools.wraps, inner会遮盖function的__doc__和__name__.