Der in Decorator zum Messen der Ausführungszeit 1 verwendete Dekorator hat die Ausführungszeit zurückgegeben. Gehen Sie wie folgt vor, um die Ausführungszeit anzuzeigen und gleichzeitig den ursprünglichen Wert der zu dekorierenden Funktion zurückzugeben. Es wird per Druck in die Standardausgabe ausgegeben, aber ich denke, es ist auch gut, ein Protokollierungsmodul oder ähnliches zu verwenden.
def time(func):
"""
Debug Dekorator
Dekorateur, der die effektive Zeit anzeigt
"""
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
Ich habe versucht, einen neuen Dekorator für testfunc1 zu verwenden, der in [Dekorator zum Messen der Ausführungszeit 1] verwendet wird (http://qiita.com/drafts/9ac2916a9155d5317ebc/).
>>> 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
-------------------------------------------------------------
Die Ausführungszeit wurde korrekt angezeigt.
Wenn Sie nicht debuggen möchten und es mühsam ist, die Funktionsdefinition einzeln neu zu schreiben, können Sie den Zeitdekorateur mit einem Nicht-Dekorator überschreiben. Wie Sie sehen können, kann IPython usw. das Argument nicht über die Registerkarte vervollständigen. Da functools.wapas verwendet wird, kann docstring auch mit einer von einem Dekorateur umschlossenen Funktion angezeigt werden, wenn Sie docstring richtig schreiben.
def time(func):
"""
Dekorateur, der nichts tut
"""
import functools
@functools.wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
return wrapper
Recommended Posts