2015-01-26 2 views
0

Я написал статический метод в python, который требует времени для вычисления, но я хочу, чтобы он вычислял только один раз и после этого возвращал вычисленное значение. Что мне делать? здесь пример кода:Оценить функцию один раз и сохранить результат в python

class Foo: 
    @staticmethod 
    def compute_result(): 
     #some time taking process 

Foo.compute_result() # this may take some time to compute but store results 
Foo.compute_result() # this method call just return the computed result 

ответ

0
def evaluate_result(): 
    print 'evaluate_result' 
    return 1 

class Foo: 
    @staticmethod 
    def compute_result(): 
     if not hasattr(Foo, '__compute_result'): 
      Foo.__compute_result = evaluate_result() 
     return Foo.__compute_result 

Foo.compute_result() 
Foo.compute_result() 
0

Я думаю, что вы хотите сделать, это называется memoizing. Существует несколько способов сделать это с помощью декораторов, один из которых использует functools (Python 3) или некоторые short handwritten code, если вам только нравятся хешируемые типы (также для Python 2).

Вы можете аннотировать несколько декораторов для одного метода.

@a 
@b 
def f(): 
    pass