Heim > Artikel > Backend-Entwicklung > Womit beginnt ein Python-Dekorateur?
Dekoratoren sind ein wichtiger Bestandteil von Python. Einfach ausgedrückt: Es handelt sich um Funktionen, die die Funktionalität anderer Funktionen modifizieren. Sie tragen dazu bei, unseren Code kürzer und pythonischer zu machen.
Um Dekoratoren in Python zu verstehen, müssen Sie zunächst das Konzept des Abschlusses verstehen. (Empfohlenes Lernen: Python-Video-Tutorial)
In der Informatik wird der Verschluss (englisch: Closure) auch als lexikalischer Verschluss (Lexical Closure) oder Funktionsverschluss (Funktionsverschluss) bezeichnet. sind Funktionen, die auf freie Variablen verweisen. Die referenzierte freie Variable verbleibt bei der Funktion, auch nachdem sie die Umgebung, in der sie erstellt wurde, verlassen hat.
Decorator
Ein gewöhnlicher Decorator sieht im Allgemeinen so aus:
import functools def log(func): @functools.wraps(func) def wrapper(*args, **kwargs): print('call %s():' % func.__name__) print('args = {}'.format(*args)) return func(*args, **kwargs) return wrapper
Dies definiert eine Dekoration, die den Methodennamen und seine Parameter ausgibt.
Um es aufzurufen, sollte mit @ beginnen:
@logdef test(p): print(test.__name__ + " param: " + p) test("I'm a param")
Ausgabe:
call test(): args = I'm a param test param: I'm a param
Wenn der Dekorator verwendet wird, lautet die @-Syntax gebraucht, es ist ein bisschen beunruhigend. Eigentlich ist der Dekorator nur eine Methode, nicht anders als die folgende aufrufende Methode:
def test(p): print(test.__name__ + " param: " + p) wrapper = log(test) wrapper("I'm a param")
@Die Syntax übergibt die Funktion einfach an die Dekoratorfunktion, daran ist nichts Magisches Es.
Bemerkenswert ist @functools.wraps(func), der von Python bereitgestellte Dekorator. Es kann die Metainformationen der Originalfunktion in die Func-Funktion im Dekorator kopieren. Zu den Metainformationen der Funktion gehören Dokumentzeichenfolge, Name, Parameterliste usw.
Sie können versuchen, @functools.wraps(func) zu entfernen. Sie werden feststellen, dass die Ausgabe von test.__name__ zu einem Wrapper wird.
Weitere technische Artikel zum Thema Python finden Sie in der Spalte Python-Tutorial, um mehr darüber zu erfahren!
Das obige ist der detaillierte Inhalt vonWomit beginnt ein Python-Dekorateur?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!