Другие ответы охватывают то, что хорошо. Я не повторяю этого. Просто некоторые моменты, которые могут быть полезны для вас.
Как правило, memoisation - это операция, которую вы можете применить к любой функции, которая что-то вычисляет (дорого) и возвращает значение. Из-за этого он часто реализуется как декоратор . Реализация прост, и это будет нечто подобное
memoised_function = memoise(actual_function)
или выражено в качестве декоратора
@memoise
def actual_function(arg1, arg2):
#body