Syntax
Decorator funktioniert, indem er eine Funktion als Argument nimmt und sie dann innerhalb einer Wrapper-Funktion ausführt.
Um einen Decorator anzuwenden, kann man das @-Symbol gefolgt vom Namen der Decorator-Funktion verwenden, direkt über der Funktion, die modifiziert werden soll. Hier ist ein Beispiel:
def decorator(func):
...
# First method
@decorator
add(a,b):
print(f"Function add: {a} + {b}")
add(2, 3)
# Second method
add(a,b):
print(f"Function add: {a} + {b}")
inner = decorator(add)
inner(2, 3)
In diesem Beispiel erzielen beide Methoden dasselbe Ergebnis. Die erste Methode, die das @
-Symbol verwendet, ist eine lesbarere und prägnantere Art, decorators
anzuwenden, oft als "syntactic sugar" bezeichnet.
Es ist typisch, innerhalb von Decorators eine verschachtelte Funktion namens wrapper
zu verwenden.
Flexible Dekoratoren: Anpassung an unterschiedliche Funktionsargumente
Funktionen erfordern oft eine unterschiedliche Anzahl von Argumenten.
Um einen Dekorator zu entwickeln, der auf Funktionen mit unterschiedlichen Argumentanzahlen angewendet werden kann, ist es effektiv, *args
und **kwargs
in der wrapper()
-Funktion zu verwenden.
1234567891011121314151617181920212223242526272829303132333435def indicate(func): def wrapper(*args, **kwargs): print("=" * 15) print("Taken arguments:", *args, kwargs) result = func(*args, **kwargs) print("=" * 15) return result return wrapper @indicate def avg_two(a, b): """Calculate the average of two numbers""" return round((a + b) / 2, 1) @indicate def avg_three(a, b, c): """Calculate the average of three numbers""" return round((a + b + c) / 3, 1) @indicate def avg_many_kwargs(**kwargs): """Calculate the average of multiple numbers in a dictionary""" keys = 0 total = 0 for value in kwargs.values(): keys += 1 total += value return round(total / keys, 1) print("Returned:", avg_two(14, 21), "\n") print("Returned:", avg_three(225, 12, 11), "\n") print("Returned:", avg_many_kwargs(first=51, second=11, third=47, fourth=93))
Danke für Ihr Feedback!
Fragen Sie AI
Fragen Sie AI
Fragen Sie alles oder probieren Sie eine der vorgeschlagenen Fragen, um unser Gespräch zu beginnen
Awesome!
Completion rate improved to 3.7
Syntax
Swipe um das Menü anzuzeigen
Decorator funktioniert, indem er eine Funktion als Argument nimmt und sie dann innerhalb einer Wrapper-Funktion ausführt.
Um einen Decorator anzuwenden, kann man das @-Symbol gefolgt vom Namen der Decorator-Funktion verwenden, direkt über der Funktion, die modifiziert werden soll. Hier ist ein Beispiel:
def decorator(func):
...
# First method
@decorator
add(a,b):
print(f"Function add: {a} + {b}")
add(2, 3)
# Second method
add(a,b):
print(f"Function add: {a} + {b}")
inner = decorator(add)
inner(2, 3)
In diesem Beispiel erzielen beide Methoden dasselbe Ergebnis. Die erste Methode, die das @
-Symbol verwendet, ist eine lesbarere und prägnantere Art, decorators
anzuwenden, oft als "syntactic sugar" bezeichnet.
Es ist typisch, innerhalb von Decorators eine verschachtelte Funktion namens wrapper
zu verwenden.
Flexible Dekoratoren: Anpassung an unterschiedliche Funktionsargumente
Funktionen erfordern oft eine unterschiedliche Anzahl von Argumenten.
Um einen Dekorator zu entwickeln, der auf Funktionen mit unterschiedlichen Argumentanzahlen angewendet werden kann, ist es effektiv, *args
und **kwargs
in der wrapper()
-Funktion zu verwenden.
1234567891011121314151617181920212223242526272829303132333435def indicate(func): def wrapper(*args, **kwargs): print("=" * 15) print("Taken arguments:", *args, kwargs) result = func(*args, **kwargs) print("=" * 15) return result return wrapper @indicate def avg_two(a, b): """Calculate the average of two numbers""" return round((a + b) / 2, 1) @indicate def avg_three(a, b, c): """Calculate the average of three numbers""" return round((a + b + c) / 3, 1) @indicate def avg_many_kwargs(**kwargs): """Calculate the average of multiple numbers in a dictionary""" keys = 0 total = 0 for value in kwargs.values(): keys += 1 total += value return round(total / keys, 1) print("Returned:", avg_two(14, 21), "\n") print("Returned:", avg_three(225, 12, 11), "\n") print("Returned:", avg_many_kwargs(first=51, second=11, third=47, fourth=93))
Danke für Ihr Feedback!