Concatenazione dei decoratori
Lezione 7 di 12 del corso Decoratori in Python di Coddy.
È possibile concatenare più decoratori per modificare il comportamento di una funzione. Per concatenare i decoratori, basta applicarli uno dopo l'altro, con il decoratore più interno più vicino alla funzione decorata.
Ecco un esempio:
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())L'output finale è:
<b><i>Hello, world!</i></b>Nota che nell'esempio qui sopra il decoratore restituisce il valore della funzione; finora abbiamo visto solo decoratori che eseguono la funzione senza restituirne il risultato!
Sfida
MedioScrivi una funzione chiamata my_decorator che accetta un argomento intero n e restituisce una funzione decoratrice che racchiude una funzione fornita func in n livelli di tag HTML. Il tag più esterno dovrebbe essere <div>, il livello successivo dovrebbe essere <p> e così via, alternando a ogni livello successivo i tag <div> e <p>. Il livello più interno dovrebbe racchiudere l'output della funzione nei tag <b>.
Ti viene fornito il codice che verrà eseguito con my_decorator, non modificarlo!
Esempio:
@my_decorator(3)
def my_function(s):
return s.upper()
result = my_function("hello world")
print(result)Output:
<div>
<p>
<div>
<b>
HELLO WORLD
</b>
</div>
</p>
</div>Usa le nuove righe (
\n) per formattare correttamente l'output!
Provalo tu
# Escribe el código aquí
# No cambies nada debajo de esta línea
n = int(input())
@my_decorator(n)
def my_function(s):
return s.upper()
result = my_function(input())
print(result)Tutte le lezioni di Decoratori in Python
Esercitati da solo: Compilatore Python online