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