Heim > Backend-Entwicklung > Python-Tutorial > Wie kann man Dekoratoren in Python effektiv nutzen und verketten?

Wie kann man Dekoratoren in Python effektiv nutzen und verketten?

Linda Hamilton
Freigeben: 2025-01-01 08:10:10
Original
540 Leute haben es durchsucht

How to Effectively Use and Chain Decorators in Python?

Wie man Dekoratoren in Python erstellt und verkettet

Dekoratoren erstellen

Schreiben Sie eine Dekoratorfunktion, die eine andere Funktion namens „ eine „umschlossene“ Funktion als Argument:

def my_decorator(func):

    # Code to execute before calling the wrapped function
    print("Before the function runs")

    # Call the wrapped function and store its return value
    result = func()

    # Code to execute after calling the wrapped function
    print("After the function runs")

    # Return the result of the wrapped function
    return result

# Example of a decorator in action
@my_decorator
def say_hello():
    print("Hello, world!")
Nach dem Login kopieren

Verkettung Dekoratoren

Verwenden Sie den @-Operator, um mehrere Dekoratoren auf dieselbe Funktion anzuwenden:

@my_decorator
@another_decorator
def chained_function():
    print("This function is doubly decorated")
Nach dem Login kopieren

Dekoratoren mit Argumenten

Dekoratoren erlauben Argumente akzeptieren:

def decorator_with_arg(arg1, arg2):

    def decorator(func):

        # Use the decorator arguments to modify the wrapped function's behavior
        func.arg1 = arg1
        func.arg2 = arg2

        return func

# Example of a decorator with arguments
@decorator_with_arg("foo", "bar")
def my_function():
    print("Args:", my_function.arg1, my_function.arg2)
Nach dem Login kopieren

Dekorateure für den Unterricht Methoden

Verwenden Sie Dekoratoren für Methoden in einer Klasse:

class MyClass:

    @classmethod
    def my_class_method(cls):
        print("This is a class method")
Nach dem Login kopieren

Übung: Dekorieren eines Dekorators

Erstellen Sie einen Dekorator, der alles macht Andere Dekorateure akzeptieren Argumente:

def decorator_with_args(decorator_to_enhance):

    def decorator_maker(*args, **kwargs):

        def decorator_wrapper(func):

            # Wrap the original decorator and pass the arguments
            return decorator_to_enhance(func, *args, **kwargs)

        return decorator_wrapper


# Example of a decorated decorator
@decorator_with_args
def decorated_decorator(func, *args, **kwargs):
    print("Args:", args, kwargs)
    return func


@decorated_decorator(10, 20, name="John")
def my_function():
    print("Decorated function")
Nach dem Login kopieren

Am besten Praktiken

  • Vermeiden Sie eine Verlangsamung des Codes aufgrund des Dekorator-Overheads.
  • Verwenden Sie functools.wraps(), um die Informationen der ursprünglichen Funktion beizubehalten.
  • Dekoratoren sind dauerhaft einmal auf eine Funktion angewendet.
  • Erwägen Sie, sie zum Debuggen oder zur Erweiterung vorhandener Funktionen von extern zu verwenden Bibliotheken.

Beispielverwendungen

Verwenden Sie Dekoratoren für Aufgaben wie:

  • Messen der Funktionsausführungszeit (@benchmark)
  • Funktionsaufrufe protokollieren (@logging)
  • Funktionsaufrufe zählen (@counter)
  • Caching-Funktionsergebnisse

Das obige ist der detaillierte Inhalt vonWie kann man Dekoratoren in Python effektiv nutzen und verketten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage