Давайте не будем забывать о встроенной функции hasattr
, для тех, кто хочет заниматься ремеслом. Таким образом, вы можете хранить кеш-память внутри определения функции (в отличие от глобального).
def fact(n):
if not hasattr(fact, 'mem'):
fact.mem = {1: 1}
if not n in fact.mem:
fact.mem[n] = n * fact(n - 1)
return fact.mem[n]