Le décorateur utilisé dans Decorator pour mesurer le temps d'exécution 1 a renvoyé le temps d'exécution. Pour afficher l'heure d'exécution tout en renvoyant la valeur d'origine de la fonction à décorer, procédez comme suit. Il est sorti sur la sortie standard par impression, mais je pense qu'il est également bon d'utiliser un module de journalisation ou similaire.
def time(func):
"""
Décorateur de débogage
Décorateur qui affiche l'heure effective
"""
import functools
import datetime
@functools.wraps(func)
def wrapper(*args, **kwargs):
start = datetime.datetime.today()
print '-------------------------------------------------------------'
print func
print '----------------------------------'
print 'start:', start
result = func(*args, **kwargs)
end = datetime.datetime.today()
print 'end:', end
print '----------------------------------'
print 'running:', end - start
print '-------------------------------------------------------------'
return result
return wrapper
J'ai essayé d'utiliser un nouveau décorateur pour testfunc1 utilisé dans Decorator pour mesurer le temps d'exécution 1.
>>> testfunc1(rangelist)
-------------------------------------------------------------
<function testfunc1 at 0x01c40590>
----------------------------------
start: 2014-03-21 23:21:01.947000
end: 2014-03-21 23:21:02.362000
----------------------------------
running: 0:00:00.415000
-------------------------------------------------------------
L'heure d'exécution était affichée correctement.
Si vous ne voulez pas déboguer et qu'il est compliqué de réécrire la définition de la fonction une par une, vous pouvez remplacer le décorateur de temps par un décorateur à ne rien faire. Comme vous pouvez le voir en l'utilisant, IPython etc. ne peut pas compléter l'argument par tabulation. Puisque functools.wapas est utilisé, si vous écrivez correctement la docstring, la docstring peut être affichée même avec une fonction encapsulée par un décorateur.
def time(func):
"""
Décorateur qui ne fait rien
"""
import functools
@functools.wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
Recommended Posts