Menu
Coddy logo textTech

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!

challenge icon

Sfida

Medio

Scrivi 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