[PYTHON] Mit Dekorateur dekorieren

Dekorateur

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.

Stichprobe

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

Füge eine Nachricht hinzu

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)

Ausgabe

Screenshot 2015-10-27 2.02.23.png

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).

Zeitmessung

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)

Ausgabe

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).

Zusammenfassung

Sie können einer Funktion ganz einfach andere Funktionen hinzufügen, indem Sie "@ decorate_function" hinzufügen.

Recommended Posts

Mit Dekorateur dekorieren
Einfach cProfile mit einem Dekorateur
A4 Größe mit Python-Pptx
Machen Sie einen Funktionsdekorateur
Property Decorator verwenden?
Lernen Sie Librosa mit einem Tutorial 1
Zeichnen Sie mit NetworkX ein Diagramm
Versuchen Sie, mit einer Shell zu programmieren!
Erstellen Sie eine Homepage mit Django
Verwenden eines Druckers mit Debian 10
Machen Sie eine Lotterie mit Python
Erstellen Sie ein Verzeichnis mit Python
Ein bisschen im Kettenschiff stecken
Zeichnen Sie mit networkx ein Diagramm
Machen Sie ein Feuer mit kdeplot
Erstellen einer Kubernetes-Umgebung mit ansible 2
[Python] Was ist eine with-Anweisung?
Löse ABC163 A ~ C mit Python
Bedienen Sie den Belegdrucker mit Python
Python-Grafikhandbuch mit Matplotlib.
Spiele mit einer Schildkröte mit Schildkrötengrafiken (Teil 1)
Zeichne ein Diagramm mit Julia + PyQtGraph (2)
Dekorateur 1
Generieren Sie mit SciPy eine Normalverteilung
Erstellen eines bestimmten Baums mit Scikit-Learn
Lassen Sie uns eine GUI mit Python erstellen.
Machen Sie einen Sound mit Jupyter Notebook
Auflisten von Dateien mit bestimmten Erweiterungen
Erstellen eines Flask-Servers mit Docker
Erstellen Sie eine Deb-Datei mit Docker
Löse ABC166 A ~ D mit Python
Zeichnen Sie mit matplotlib ein loses Diagramm
Stellen Sie die Django-Anwendung mit Docker bereit
Machen wir einen Blockbruch mit wxPython
Erstellen Sie eine virtuelle Umgebung mit Python!
Ich habe mit Python eine Lotterie gemacht.
Zeichne einen schönen Kreis mit Numpy
Django-Tipps - Erstellen Sie eine Ranking-Site mit Django-
Zeichne ein Diagramm mit Julia + PyQtGraph (1)
Erstellen einer virtuellen Umgebung mit Python 3
Zeichne ein Diagramm mit Julia + PyQtGraph (3)
Löse ABC168 A ~ C mit Python
Erstellen Sie ein Empfehlungssystem mit Python
Dekorateur 2
Erstellen Sie eine Webanwendung mit Django
Generieren Sie eine vorsignierte URL mit golang
[Python] Generiere ein Passwort mit Slackbot
Löse ABC162 A ~ C mit Python
Erstellen Sie ein universelles Dekorationsframework für Python
Zeichnen Sie ein Diagramm mit Pandas + XlsxWriter
Machen Sie einen Filter mit einer Django-Vorlage
Löse ABC167 A ~ C mit Python
Lassen Sie uns ein Diagramm mit Python erstellen! !!
Machen wir mit xCAT einen Spacon
Erstellen Sie einen Poisson-Stepper mit numpy.random
Machen Sie eine schöne Grafik mit Plotly
Erstellen einer Kubernetes-Umgebung mit ansible 1
Zeichnen Sie ein Diagramm mit der PySimple-Benutzeroberfläche