2015-10-23 1 views
1

Я пытаюсь подсчитать количество раз, которое оценивается f(x), не меняя слишком много кода, не похоже, что это должно быть очень сложно, но я не могу понять, как это понять.Простой способ подсчета количества вычислений def 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() 
+0

Я не знаю точно, что вы просите, но ваш код имеет много избыточных вещей в нем, как и вся функция 'bounding()'. – TigerhawkT3

+0

Когда оценивается 'def f (x)', создается функция. Это происходит только один раз в вашем коде. Вы имеете в виду количество раз, когда функция 'f' вызывается и выполняется? – jpmc26

ответ

0
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 
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 
+0

Примечание ... это не требует никаких изменений в вашей функции ... просто написать дополнительный декоратор ... который полностью за пределами вашей функции – labheshr

+0

Почему бы не поставить образец в свой код с помощью декоратора? – jpmc26

+0

@ jpmc26: Я не понимаю, что вы имеете в виду? Я использовал декоратор в своем примере: его называют «count» .. @ count? – labheshr

 Смежные вопросы

  • Нет связанных вопросов^_^