假设我想将 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)

问题: 有没有办法知道用户定义的函数 fquad 调用了多少次?我想这样做,因为我很想知道 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/

10-09 20:16