Chaining Decorators
Lektion 7 von 12 im Kurs Python-Dekoratoren von Coddy.
Es ist möglich, mehrere Decorator miteinander zu verketten, um das Verhalten einer Funktion zu modifizieren. Um Decorator zu verketten, wenden Sie diese einfach nacheinander an, wobei der innerste Decorator der zu dekorierenden Funktion am nächsten steht.
Hier ist ein Beispiel:
def make_bold(func):
def wrapper():
return "<b>" + func() + "</b>"
return wrapper
def make_italic(func):
def wrapper():
return "<i>" + func() + "</i>"
return wrapper
@make_bold
@make_italic
def hello():
return "Hello, world!"
print(hello())Die endgültige Ausgabe ist:
<b><i>Hello, world!</i></b>Beachten Sie, dass im obigen Beispiel der Decorator den Wert der Funktion zurückgibt; bisher haben wir nur Decorator gesehen, welche die Funktion ausführen, ohne deren Ergebnis zurückzugeben!
Aufgabe
MittelSchreiben Sie eine Funktion namens my_decorator, die ein Ganzzahl-Argument n entgegennimmt und eine Decorator-Funktion zurückgibt, die eine gegebene Funktion func in n Schichten von HTML-Tags einschließt. Das äußerste Tag sollte <div> sein, die nächste Schicht sollte <p> sein und so weiter, wobei jede nachfolgende Schicht abwechselnd zwischen <div> und <p> Tags wechselt. Die innerste Schicht sollte die Ausgabe der Funktion in <b> Tags einschließen.
Ihnen wird der Code vorgegeben, der mit my_decorator ausgeführt wird, ändern Sie diesen nicht!
Beispiel:
@my_decorator(3)
def my_function(s):
return s.upper()
result = my_function("hello world")
print(result)Ausgabe:
<div>
<p>
<div>
<b>
HELLO WORLD
</b>
</div>
</p>
</div>Verwenden Sie Zeilenumbrüche (
\n), um die Ausgabe korrekt zu formatieren!
Probier es selbst
# Schreibe hier den Code
# Ändere nichts unterhalb dieser Zeile
n = int(input())
@my_decorator(n)
def my_function(s):
return s.upper()
result = my_function(input())
print(result)Alle Lektionen in Python-Dekoratoren
Übe selbstständig: Online-Python-Compiler