Explicación del código Python con decoradores
El código muestra el uso de decoradores con parámetros en Python. Aquí está el código reescrito con la indentación correcta:
def repetir(n):
def decorador(function):
def wrapper():
for _ in range(n):
function()
return wrapper
return decorador
@repetir(3)
def hola():
print("Hola mundo!")
hola()Explicación paso a paso:
1. Función repetir(n)
Es un decorador con parámetro que recibe un número
nRetorna la función
decorador
2. Función decorador(function)
Recibe la función a decorar (
function)Define y retorna la función
wrapperque envuelve el comportamiento original
3. Función wrapper()
Contiene la lógica del decorador
Ejecuta la función original
nveces usando un buclefor
4. Aplicación del decorador
@repetir(3)
def hola():
print("Hola mundo!")Esto equivale a:
hola = repetir(3)(hola)La función
holaqueda envuelta por el decorador
5. Ejecución
hola()Salida:
Hola mundo!
Hola mundo!
Hola mundo!¿Cómo funciona el flujo?
repetir(3)se ejecuta y retornadecoradordecorador(hola)se ejecuta y retornawrapperAl llamar
hola(), en realidad se ejecutawrapper()wrapper()ejecuta la función original 3 veces
Los decoradores con parámetros son útiles para crear comportamientos reutilizables que pueden personalizarse según los parámetros proporcionados.
for _ in range(n):
function()¿Qué hace este bucle?
range(n): Crea una secuencia de números desde 0 hasta n-1for _ in: El guión bajo_es una convención en Python que indica que la variable del bucle no se va a usar dentro del mismofunction(): Ejecuta la función decorada
En contexto del decorador:
Cuando usas @repetir(3) antes de def hola():, estás diciendo:
Ejecuta la función
hola()3 veces cada vez que la llames
Ejecución paso a paso:
hola()se llama una vezEl decorador intercepta esta llamada y ejecuta:
for _ in range(3): # Se repite 3 veces hola() # Ejecuta la función originalResultado en consola:
Hola mundo! Hola mundo! Hola mundo!
Sin el decorador sería:
# En lugar de esto:
hola()
# Tendrías que hacer esto:
hola()
hola()
hola()El bucle for _ in range(n): function() es lo que permite repetir automáticamente la ejecución de la función sin tener que llamarla manualmente múltiples veces.
Comentarios
Publicar un comentario