Оцените функцию один раз и сохраните результат в 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

2 ответа

Решение
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()

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

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

@a
@b
def f():
   pass
Другие вопросы по тегам