Implementierung von Wrapper-Funktionen
Grundlegende Wrapper-Funktion
Hier ist ein einfaches Beispiel für eine grundlegende Wrapper-Funktion in Python:
def uppercase_wrapper(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
return result.upper()
return wrapper
@uppercase_wrapper
def greet(name):
return f"Hello, {name}!"
print(greet("LabEx")) ## Output: HELLO, LABEX!
In diesem Beispiel ist die uppercase_wrapper
-Funktion eine Wrapper-Funktion, die ein func
-Argument nimmt und eine neue Funktion wrapper
zurückgibt. Die wrapper
-Funktion ruft die ursprüngliche func
auf und wandelt dann das Ergebnis in Großbuchstaben um, bevor sie es zurückgibt.
Die Syntax @uppercase_wrapper
ist eine Abkürzung für die Anwendung der Wrapper-Funktion auf die greet
-Funktion. Dies entspricht der Schreibweise greet = uppercase_wrapper(greet)
.
Parametrisierte Wrapper-Funktionen
Wrapper-Funktionen können auch Argumente akzeptieren, wodurch Sie ihr Verhalten anpassen können. Hier ist ein Beispiel für eine parametrisierte Wrapper-Funktion:
def repeat_wrapper(n):
def wrapper(func):
def inner(*args, **kwargs):
result = func(*args, **kwargs)
return result * n
return inner
return wrapper
@repeat_wrapper(3)
def say_hello(name):
return f"Hello, {name}!"
print(say_hello("LabEx")) ## Output: Hello, LabEx!Hello, LabEx!Hello, LabEx!
In diesem Beispiel ist die repeat_wrapper
-Funktion eine Higher-Order-Funktion, die ein Argument n
nimmt und eine neue Wrapper-Funktion zurückgibt. Die zurückgegebene Wrapper-Funktion umschließt dann die ursprüngliche func
und wiederholt das Ergebnis n
Mal.
Die Syntax @repeat_wrapper(3)
wendet die repeat_wrapper
mit einem Argument von 3
auf die say_hello
-Funktion an.
Stapeln von Wrapper-Funktionen
Sie können auch mehrere Wrapper-Funktionen auf eine einzelne Funktion stapeln, wodurch Sie mehrere Ebenen von Funktionalität anwenden können:
def uppercase_wrapper(func):
def wrapper(*args, **kwargs):
result = func(*args, **kwargs)
return result.upper()
return wrapper
def repeat_wrapper(n):
def wrapper(func):
def inner(*args, **kwargs):
result = func(*args, **kwargs)
return result * n
return inner
return wrapper
@uppercase_wrapper
@repeat_wrapper(3)
def say_hello(name):
return f"Hello, {name}!"
print(say_hello("LabEx")) ## Output: HELLO, LABEX!HELLO, LABEX!HELLO, LABEX!
In diesem Beispiel wird die say_hello
-Funktion zuerst von der repeat_wrapper
und dann von der uppercase_wrapper
umschlossen. Die Reihenfolge der Wrapper-Funktionen ist wichtig, da sie von der innersten zur äußersten angewendet werden.
Indem Sie die Implementierung von Wrapper-Funktionen verstehen, können Sie leistungsfähigen und flexiblen Python-Code erstellen, der das Verhalten Ihrer Funktionen verbessert, ohne deren Kernlogik zu ändern.