In questo articolo vedremo come implementare la memoization delle funzioni di Python.

La memoization è un pattern volto ad ottimizzare la performance di una funzione che esegue un task computazionale dispendioso. Il principio alla base di tale pattern prevede la creazione di una cache in cui memorizzare di volta in volta i risultati in modo da non ripetere il task se l'input della funzione è lo stesso.

Possiamo implementare tale pattern usando un dizionario come cache in questo modo.

import math

func_cache = {}

def memoized_func(num=1):
    if num in func_cache:
        return func_cache[num]
    result = math.factorial(num)
    func_cache[num] = result
    return result    

Ogni volta che la funzione viene eseguita, se l'input è già presente nel dizionario come chiave, viene restituito il suo valore e il task non viene eseguito. Al contrario, se la chiave non esiste, viene eseguito il task e il risultato viene memorizzato nel dizionario usando come chiave il valore di input passato alla funzione.