Comprendre la mémorisation en Python
En programmation, la mémoïsation est une technique utilisée pour améliorer l'efficacité en stockant les résultats des appels de fonction en fonction de leur entrée arguments. Au lieu de recalculer ces résultats, les résultats stockés sont directement renvoyés, ce qui permet d'économiser du temps et des ressources.
Implémentation en Python
Pour utiliser la mémorisation en Python, vous pouvez soit gérer manuellement un dictionnaire pour mettre en cache les résultats ou exploiter le décorateur '@lru_cache' intégré du module 'functools'. Voici un exemple utilisant l'approche manuelle pour calculer des factorielles avec mémoïsation :
factorial_memo = {} def factorial(k): if k < 2: return 1 if k not in factorial_memo: factorial_memo[k] = k * factorial(k - 1) return factorial_memo[k]
Décorateurs pour la mémorisation
Python a introduit les décorateurs dans la version 2.4, offrant une manière concise d'appliquer mémorisation des fonctions. Vous pouvez créer une classe de décorateur 'Memoize' et l'appliquer à votre fonction :
class Memoize: def __init__(self, f): self.f = f self.memo = {} def __call__(self, *args): if not args in self.memo: self.memo[args] = self.f(*args) return self.memo[args] @Memoize def factorial(k): if k < 2: return 1 return k * factorial(k - 1)
Le décorateur'@lru_cache'
Le module 'functools' fournit un Décorateur '@lru_cache' qui offre une implémentation plus robuste de la mémorisation. Il met automatiquement en cache les résultats et gère la taille du cache pour éviter une utilisation excessive de la mémoire.
En résumé, la mémorisation en Python est une technique puissante pour optimiser les performances des fonctions en mettant en cache les résultats précédents et en évitant les recalculs inutiles. En tirant parti des décorateurs ou de la mise en cache manuelle, vous pouvez améliorer l'efficacité de votre code et améliorer sa réactivité.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!