Heim >Backend-Entwicklung >Python-Tutorial >Womit beginnt ein Python-Dekorateur?

Womit beginnt ein Python-Dekorateur?

(*-*)浩
(*-*)浩Original
2019-07-20 13:30:523308Durchsuche

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.

Womit beginnt ein Python-Dekorateur?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn