Warning: Undefined array key "DOKU_PREFS" in /home/clients/a4e6fc1ce1761b72982b805de0f418c4/web/python/mesrecettespython/inc/common.php on line 2082
decorateurs_modeles [Les recettes Python de Tyrtamos]

Outils pour utilisateurs

Outils du site


decorateurs_modeles

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentes Révision précédente
Prochaine révision
Révision précédente
Prochaine révision Les deux révisions suivantes
decorateurs_modeles [2012/03/26 08:22]
tyrtamos
decorateurs_modeles [2012/03/26 17:55]
tyrtamos
Ligne 229: Ligne 229:
 class tempsexecmoyen(object): class tempsexecmoyen(object):
     """ decorateur sans passage d'argument """     """ decorateur sans passage d'argument """
 +
     def __init__(self, fonc):     def __init__(self, fonc):
         self.fonc = fonc         self.fonc = fonc
Ligne 234: Ligne 235:
         self.tt = 0  # temps total cumulé         self.tt = 0  # temps total cumulé
         functools.wraps(fonc)(self)         functools.wraps(fonc)(self)
 +
 +    def __get__(self, inst, owner=None):
 +        """nécessaire pour décorer les méthodes: avoir le bon 'self' """
 +        return types.MethodType(self, inst)
 +
     def __call__(self, *args, **kwargs):     def __call__(self, *args, **kwargs):
         """ méthode appelée à chaque appel de la fonction décorée """         """ méthode appelée à chaque appel de la fonction décorée """
Ligne 243: Ligne 249:
         print u"Temps moyen: %.7f" % (self.tt/self.c)         print u"Temps moyen: %.7f" % (self.tt/self.c)
         return result         return result
 +
 +    def resultat(self):
 +        """retourne le résultat: compteur d'appel et temps moyen d'exécution"""        
 +        if self.c == 0: 
 +            tm = 0
 +        else: 
 +            tm = self.tt/self.c
 +        return c, tm
 +
  
 @tempsexecmoyen @tempsexecmoyen
Ligne 269: Ligne 284:
 #Temps moyen: 0.0003946 #Temps moyen: 0.0003946
 #4536 #4536
 +</code>
 +
 +J'ai ajouté la méthode 'resultat' au décorateur. On peut l'appeler à tout moment __séparément__ de son effet sur l'exécution de la fonction décorée. Et on l'appelle par l'intermédiaire de la fonction décorée! cela donnera le nombre total d'appels ainsi que la moyenne des temps d'exécution cumulés sur tous les appels:
 +
 +<code python>
 +print calcul.resultat()
 </code> </code>
  
decorateurs_modeles.txt · Dernière modification: 2012/03/26 18:08 de tyrtamos