Não existe uma maneira canônica e única de fazer isso Python. Nenhum dos quais eu estou ciente, de qualquer forma - e eu estou falando como alguém que olhou, e quem é o autor de um pacote de memorandos bem-sucedido .
No entanto, acredito que a sua falta de arte prévia encontrada pode ser uma questão de terminologia, tanto quanto qualquer outra coisa. Você pediu armazenamento em cache . Esse é um termo apropriado, mas é excessivamente amplo. Armazenar em cache os resultados de uma determinada chamada de função ou atividade para uso posterior é mais especificamente chamado de memoizing ou memoization . E, de fato, há muitos pacotes de memoizing disponíveis na comunidade , bem como muitas receitas ( por exemplo, esta ). Eu também vi funções de memorando em muitos pacotes de utilitário multiuso. Muitos deles são maduros, endurecidos pela batalha e constantemente usados na produção - não apenas "código da versão 0.6".
Por que o memoizing não é mais canonicamente ou manuseado de maneira idiomática, não posso dizer. Talvez porque existem várias maneiras de realizá-lo com virtudes e compensações diferentes. Ou talvez porque já existem tantas abordagens diferentes em uso. Muitas vezes eu encontro recursos - "achatar uma lista de listas" é outra - que outras comunidades linguísticas convergem ansiosamente, mas que a comunidade ou os poderes do Python parecem preferir manipular como receitas em vez de se comprometer com uma API específica. Em qualquer caso, se o seu código funcionar, seja bem-vindo ao grupo de memoizers de sucesso!Atualizar
Como a biblioteca padrão do Python 3 (para o 3.2 e posterior) inclui um decorador lru_cache
( documentação aqui ), eu tenho que dizer que parece uma tentativa recente de padronizar o caso de uso de memorização mais comum. O fato de ter chegado tão tarde na evolução do Python é provavelmente o porquê de não haver uma solução comum, mas, para um novo código, é o mais próximo possível do canônico que você encontrará.