假设我想将 x**2
从 0 集成到 1。我使用 scipy.integrate.quad
做到这一点:
from scipy import integrate
def f(x): return x**2
I = integrate.quad(f, 0, 1)[0]
print(I)
问题: 有没有办法知道用户定义的函数
f
被 quad
调用了多少次?我想这样做,因为我很想知道 quad
使用了多少来评估积分。 最佳答案
当然。使用调用计数包装器:
import functools
def counted_calls(f):
@functools.wraps(f)
def count_wrapper(*args, **kwargs):
count_wrapper.count += 1
return f(*args, **kwargs)
count_wrapper.count = 0
return count_wrapper
并将包装后的版本传递给
quad
:wrapped = counted_calls(f)
integrate.quad(wrapped, 0, 1)
print(wrapped.count)
Demo,调用计数为21。
我特别避免使用全局计数器或将
counted_calls
用作f
定义上的装饰器(尽管您可以根据需要将其用作装饰器),以便更轻松地进行单独计数。使用全局或将其用作装饰器时,您必须记住每次都要手动重置计数器。关于python - 函数被调用的次数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52448773/