Простой способ подсчитать, сколько раз def F (X) оценивается?

Я пытаюсь посчитать, сколько раз f(x) оценивается без необходимости слишком много менять мой код, не кажется, что это должно быть очень сложно, но я не могу понять это.

def f (x):
    f = 12*x**5-45*x**4+40*x**3+5
    return f
def bounding():
    d=.1
    x=6
    n=0

while(n<50):
    Lb=x-d
    n+=1
    Ub=x+d
    if f(Lb)>=f(x) and f(Ub)<=f(x):
        x=x+d           
    elif f(Lb)<=f(x) and f(Ub)>=f(x):
        x=x-d           
    elif f(Lb)>=f(x) and f(Ub)>=f(x):
        print("Lower bound:",Lb,"Upperbound:",Ub)
        break
    print (n)
bounding()

2 ответа

Решение на основе декоратора, которое вы можете применить к любой функции...

def count(fn):
        def wrapper(*args, **kwargs):
            wrapper.called+= 1
            return fn(*args, **kwargs)
        wrapper.called= 0
        wrapper.__name__= fn.__name__
        return wrapper

@count
def test():
    print "something"

test()

print test.called #will print 1
class F:
    count = 0
    def __call__(self, x):
        self.count += 1
        return 12*x**5-45*x**4+40*x**3+5

f = F()

С этого момента, как и раньше, и количество определяется f.count, Проверено:)

>>> f = F()
>>> f(1)
12
>>> f(2)
-11
>>> f.count
2
>>> f(2)
-11
>>> f.count
3
Другие вопросы по тегам