Ein Dekorateur ist so, als würde er einer vorhandenen Funktion zusätzliches Verhalten hinzufügen. Sie können beispielsweise die Ausführungszeit messen und ausgeben oder eine Meldung wie "~ ~ Funktion wurde ausgeführt" hinzufügen.
Dieses Mal habe ich etwas gemacht, um der Ausgabe- und Ausführungszeitmessung eine Nachricht hinzuzufügen Code erstellt: https://github.com/KodairaTomonori/Qiita/tree/master/default_module/syntax
decoration.py
deco = '¡+゜+¡・゜・¡+*+¡・★・¡+*+¡・===[ '
deco_end = deco.replace('[', ']')[::-1]
deco_result = [' ∧____∧ Ergebnisse', '( `Д´ )Ich werde ausgeben', '(350035', '/ )', '( / ̄∪']
def deco_func(func):
def decoration(*args, **kwargs):
print(deco + 'start ' + func.__name__ + deco_end)
for i in range(len(deco_result) ):
if i != 2: print(deco_result[i])
else: print(deco_result[i], func(*args, **kwargs) )
print(deco + 'end ' + func.__name__ + deco_end)
return decoration
@deco_func
def addition(a, b):
return '{} + {} = {}'.format(a, b, a + b)
if __name__ == '__main__':
addition(103842, 283746)
Der Dekorateur ist, dass die Funktion deco_func
die Funktion decoration
zurückgibt, die innerhalb der Funktion erstellt wurde.
decoration
druckt den Anfang und das Ende, um die Ausgabe zu dekorieren.
Sie können den Funktionsnamen mit func .__ name__
erhalten.
Durch Festlegen von "(* args, ** kwargs)" können die meisten Funktionen ausgeführt werden.
Um es als Dekorateur zu verwenden, fügen Sie einfach @ deco_func
vor der Funktion hinzu.
Auf diese Weise ist Addition
=deco_func (Addition) (a, b)
.
timer.py
#usr/bin/python
import time
def timer(func):
def print_time(*args, **kwargs):
start = time.time()
func(*args, **kwargs)
print(func.__name__ + \
'Die Zeit, die für die Ausführung benötigt wurde{}Sekunden'.format(time.time() - start) )
return print_time
@timer
def roop_timer(a):
return roop(a)
def roop(a):
sum_ = 0
for i in range(a):
sum_ += i
return sum_
if __name__ == '__main__':
roop_timer(10000)
timer(roop)(10000)
output.txt
roop_Die Ausführung des Timers dauerte 0 Mal.0008311271667480469 Sekunden
Es dauerte 0 Zeit, um Roop auszuführen.0008249282836914062 Sekunden
print_time
misst die Zeit und gibt das Ergebnis aus.
func .__ name__
ruft den Funktionsnamen ab.
Wenn Sie "@ timer" nur in einem Teil wiedergeben möchten, können Sie den gleichen Vorgang ausführen, indem Sie "timer (roop) (10000)" einstellen.
Es ist auch möglich, eine dafür vorgesehene Funktion zu erstellen, z. B. "roop_timer" (dies ist einfacher, wenn zwei oder mehr verwendet werden).
Sie können einer Funktion ganz einfach andere Funktionen hinzufügen, indem Sie "@ decorate_function" hinzufügen.
Recommended Posts