Lassen Sie uns also über einige der praktischen Anwendungen von Dekorateuren sprechen. Ich meine, wir haben sie bereits im Unterricht
gesehen, oder?
Wir haben gesehen, wie Klassenmethoden und statische Methoden Klassenmethoden und statische Methoden für die Klasse erstellen konnten, die
die direkte Klasse verwenden kann.
Und wenn Sie sich nicht an diese erinnern, gehen Sie einfach zu diesen Videos zurück.
Aber ich möchte Ihnen eines meiner Lieblingsbeispiele für einen Dekorateur zeigen, wir werden unser eigenes erstellen.
Was wir tun werden, ist, dass ich eine Aufführung haben möchte.
Decorator und übrigens, dieser Decorator existiert nicht in Python, wir werden ihn von Grund auf neu erstellen.
Was ich tun möchte, ist in der Lage zu sein, einen Performance-Decorator zu haben, den ich beim Testen meines Codes verwenden kann, um zu sehen,
wie schnell mein Code ausgeführt wird.
Wenn ich zum Beispiel eine Funktion hätte, sagen wir, das dauert lange.
Nun, eine lange Zeit bis zum Abschluss, also werde ich eine wirklich lange Schleife machen und sagen, für mich im Bereich von sagen
wir.
All diese Zahlen, und ich mache eine zufällige Berechnung, ich mal fünf.
Diese Funktion, ich möchte wissen, wie gut sie funktioniert, wie viele Millisekunden es dauert, um sie abzuschließen, also wie können
wir sie erstellen?
Zuerst werde ich etwas tun, worüber wir noch nicht gesprochen haben, dass wir etwas
über Module in eingebauten Modulen machen werden, also werden wir vorerst nicht zu viel
darüber reden, aber wir gehen um aus dem Zeitmodul etwas namens Doppelte Zeit zu importieren.
Nochmals, etwas, über das wir im Modulabschnitt des Kurses sprechen werden, ich sage im Wesentlichen, hey,
wenn ich Python installiert habe oder in meinem Fall, wenn ich dieses Reppel verwende, hat es Zugriff auf diese Zeit, wenn ich
gefragt habe dafür.
Und in diesem Fall sage ich, hey, ich möchte dieses Zeitobjekt oder -modul verwenden, das ich von Python bekomme.
Und hier werden wir unseren Dekorateur nach dem Muster erstellen, das wir gelernt haben.
Ich werde sagen, dass Leistung definieren und Leistung eine Funktion akzeptieren wird, genau wie wir es zuvor gesehen haben.
Und hier drin haben wir unsere Verpackung.
Sagen wir also Wrapper-Funktion und Wrapper-Funktion.
Wenn Sie sich erinnern, wird es flexibel sein, indem es Star Arcs und Star Star Keyword Arcs berücksichtigt.
Damit wir ihm beliebig viele Parameter übergeben können, weil wir nicht wissen, wie diese Funktion funktioniert, wie viele Parameter sie
haben wird, und ich möchte die Leistung für alle meine Funktionen nutzen können.
Nun, hier zuerst, was wir tun werden, ist das Ergebnis der Funktion.
Sei der.
Funktion, die wir gleich hier erhalten und dann einfach sagen.
Führen Sie die Funktion mit den Schlüsselwortbögen star und star star aus.
Und zum Schluss möchte ich die Ergebnisse zurückgeben.
Und schließlich werden wir den Rapper zurückgeben, also nichts, was wir noch nicht gesehen haben, ich hätte einfach hierher zurückkehren oder
einfach die Funktion ausführen können, aber ich zeige Ihnen gleich, warum ich das so gemacht habe .
Im Moment tut unsere Funktion nicht wirklich etwas.
Wenn ich klicke, laufe.
Nun, nichts passiert, wenn ich lange mache und diese Funktion ausführe.
Es hat nur lange gedauert, aber das war's, es passiert nichts.
Dies ist, wenn wir die Dinge interessant machen.
Wir möchten vom Beginn der Ausführung dieser Funktion bis zum Ende der Ausführung dieser Funktion berechnen.
Und wir können dazu das Zeitmodul verwenden.
Ich kann für den Start eine variable Zeitleiste erstellen und einfach Zeit sagen.
Also führe ich diese Zeitfunktion aus, die starten wird.
Eine Zeit und sagen, hey, diese erste Zeit wird eine sein.
Und nach dieser Funktion, unserer Hauptfunktion, lange Zeit, werde ich T zwei sagen und sagen, hey, wie spät
ist es?
Im Augenblick.
Dieses Mal überprüfen wir also, wie spät es jetzt ist, und dann führen wir
diese Funktion aus und dann wird es dieses Mal die Zeit
überprüfen.
Rechts.
Alles, was wir tun, ist, eine F-Zeichenfolge zu drucken und zu sagen, dass T eins minus T gedauert hat.
Richtig, und das gibt tatsächlich eine Millisekunde zurück, also sage ich nur Arme vier Millisekunden.
Und das ist es.
Ich habe meine Funktion nur mit dieser zusätzlichen Uhr verpackt, und dann drucke ich aus, sobald wir die Funktion ausführen, wie
lange es gedauert hat.
Schauen wir es uns also an.
Wenn ich jetzt gleich hier meine Langzeitfunktion ausführe und auf Ausführen klicke.
Okay, ich bekomme eine Minusnummer, weil ich hier Mist gebaut habe.
Dies sollte T zwei minus T eins sein, da die Zeit auf T eins einige Zeit vergeht und dann zwei.
Zwei wird also immer größer als T eins sein, wenn ich das ausführe.
In Ordnung, es dauerte Punkt eins, sechs Millisekunden, ich denke, das sind tatsächlich Sekunden.
Lassen Sie uns diese lange Funktion jetzt noch länger machen, wenn ich so vorgehe und auf Ausführen klicke.
Oh, Junge, das hat ein Komma neun Sekunden gedauert.
Was ist, wenn ich es noch länger mache, wenn ich auf Ausführen klicke und das ist der Teil, in dem ich so lange rede, bis
die Funktion läuft, weil es eine peinliche Stille geben wird, sonst hoffentlich bald dieses Ende, weil ich
nichts anderes zu sagen habe.
Komm schon, das wird unangenehm.
Gut.
Komm schon.
Oh Junge.
Ich werde hier schnell vorspulen.
Oh, Junge, es dauerte 19 Sekunden.
Das ist ziemlich schlimm.
Aber ich habe jetzt diesen Dekorator, den ich so ziemlich jeder Funktion in meinem Programm zuweisen kann und die Leistung meiner
Funktion tatsächlich ziemlich nützlich messen kann, oder?
Ich könnte diesen Code haben.
Und bevor ich, sagen wir, meinen Code einsetze oder in die Welt veröffentliche, kann ich testen, wie leistungsfähig meine Funktionen sind
und vielleicht kann ich Dinge auf verschiedene Weise optimieren.
Sehr, sehr nützlich.
Und das habe ich in nur wenigen Zeilen Code getan.
Neun Zeilen Code.
Nun, wohlgemerkt, dieser Performance-Dekorator hängt von der Maschine ab und davon, wie schnell Ihre CPU und Ihr Arbeitsspeicher auf Ihrem
Computer sind.
Für das, was mich 19 Sekunden gedauert hat, können Sie je nach Gerät viel mehr oder weniger brauchen.
Aber dies ist eine schöne Möglichkeit, Funktionen relativ zu vergleichen.
Ich hoffe, dass Sie danach sehen, dass die Dekoratoren von Dekoratoren in Python-Bibliotheken und -Frameworks häufig verwendet
werden.
Web-Frameworks, über die wir sprechen werden, wie Django und Flask verwenden Decorators, vielleicht
möchten Sie einen Authentifizierungs-Decorator haben, damit Sie authentifiziert werden, wo jede Funktion nur ausgeführt werden kann.
Wenn der Benutzer authentifiziert ist.
Vielleicht haben sie das Privileg, eine Funktion wie das Anmelden bei einer Website auszuführen.
Oder vielleicht brauchen Sie nur eine Protokollierung oder Protokollierung.
Decorator, der sich einfach protokolliert und Ihrer Datenbank mitteilt, dass sich jemand in Ihr System eingeloggt
oder etwas bei Amazon gekauft hat.
Oder, hey, jemand hat gerade eine Freundschaftsanfrage gestellt, es gibt so viele Verwendungsmöglichkeiten für Dekorateure und Dekorateure sind ein
schwieriges Thema.
Sie werden sie nicht überall im Python-Code sehen.
Sie sind nur eine zusätzliche Funktion, die Sie verwenden können, wenn Sie mit Python immer vertrauter werden.
Aber ich hoffe, Sie werden sie am Ende dieser Halle am wenigsten verstehen, um vielleicht eines Tages Ihre eigenen
zu erstellen oder vorgefertigte von Bibliotheken und Frameworks zu verwenden.
Wir sehen uns im nächsten.
Wiedersehen.