比如要打印某文件中所有函数的执行时间
import time
import inspect
from xxx import log
def time_it(func):
def wrapper(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
log("Function %s took %s seconds to execute." %(func.__name__, end_time - start_time))
return result
return wrapper
def decorate_current_module_functions():
current_module = inspect.getmodule(inspect.currentframe())
for name, obj in inspect.getmembers(current_module):
if inspect.isfunction(obj):
if obj.__name__ != "log": # 因为time_it里面使用了log,所以这里要剔除掉log,不然会出现无限递归。(如果是使用print就没问题,time_it里面如果调用别的函数,就得剔除掉,不然递归了)
globals()[name] = time_it(obj)
def fun1():
time.sleep(1)
def fun2():
time.sleep(2)
# 给当前模块中的所有函数添加装饰器
decorate_current_module_functions()