Zum Inhalt

Dekoratoren

Dekorateure

  • Ein Dekorator ist eine Funktion, die eine andere Funktion umschließt, um deren Verhalten zu verbessern oder zu ändern.
  • Dekoratoren sind nur aufgrund der Fähigkeit von Funktionen möglich, sich wie Variablen zu verhalten
  • Ein Dekorateur verstärkt die Funktion.
  • Es ist eine Funktion, die eine andere Funktion umschließt und sie verbessert oder ändert.

Einen Dekorateur erstellen

def my_decorator(func):
    def wrap_func():             #inner function, with parameter x
        print('**********')      #extra functionality
        func()                   #calling the original function
        print('**********')      #extra functionality
    return wrap_func             #returning the inner function

@my_decorator
def bye():            # We are decorating bye function
    print()           # We've super boosted our bye.

bye()                 # we are actually calling wrap_func inside my_decorator

Was es tut: Variable = my_decorator(func) func()

my_decorator(bye)()    # same as above

DEKORMUSTER

  • Dekorateure können mit args und *kwargs eine beliebige Anzahl von Argumenten akzeptieren.
def decorator(func):
    def wrap_func(*args, **kwargs):     #can add infinite parameters
        func(*args, **kwargs)
    return wrap_func

@decorator
def hey(greeting, emoji=':)'):
    print(greeting, emoji)

hey('yoooo')

Leistungsbeispiel

  • Messen Sie die Ausführungszeit mithilfe eines Dekorateurs eines Programms.
from time import time

def performance(fn):
    def wrapper(*args, **kwargs):
        st = time()
        fn(*args, **kwargs)
        ed = time()
        print(f'took {ed-st} ms')
    return wrapper

@performance
def long_time():
    print(1)
    for i in range(500):
        return i*5

long_time()