Простой способ подсчитать, сколько раз 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