【发布时间】:2022-11-19 13:49:09
【问题描述】:
我想计算每个函数被调用了多少次。 我有一个包装器来进行计数并将其保存到全局变量中
def counter(f):
global function_calls
function_calls = 0
def wrapper(*args, **kwargs):
global function_calls
function_calls += 1
return f(*args, **kwargs)
return wrapper
然后其他两个函数被装饰用于计数
@counter
def square(x):
return x * x
@counter
def addition_by_self(x):
return x + x
现在,当我每次调用该函数五次时,全局变量 function_calls 返回 10。这是有道理的。
print(square(x=4))
print(square(x=4))
print(square(x=4))
print(square(x=4))
print(square(x=4))
print(addition_by_self(x=4))
print(addition_by_self(x=4))
print(addition_by_self(x=4))
print(addition_by_self(x=4))
print(addition_by_self(x=4))
print(f"Number of the function got called: {function_calls}")
运行文件给出输出。
16
16
16
16
16
8
8
8
8
8
Number of the function got called: 10
现在我需要一些关于如何使装饰器返回每个函数被调用的次数的解决方案或想法,而不是所有调用的聚合。我可能还有其他功能需要跟踪它们也被调用的次数。
本质上我想做类似print(function_calls) # or something proper的事情
然后像这样出去:sqaure got called 5 times and addition_by_self got called 5 times
【问题讨论】:
标签: python python-3.x decorator python-decorators