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:

python
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 n

  • Retorna la función decorador

2. Función decorador(function)

  • Recibe la función a decorar (function)

  • Define y retorna la función wrapper que envuelve el comportamiento original

3. Función wrapper()

  • Contiene la lógica del decorador

  • Ejecuta la función original n veces usando un bucle for

4. Aplicación del decorador

python
@repetir(3)
def hola():
    print("Hola mundo!")
  • Esto equivale a: hola = repetir(3)(hola)

  • La función hola queda envuelta por el decorador

5. Ejecución

python
hola()

Salida:

text
Hola mundo!
Hola mundo!
Hola mundo!

¿Cómo funciona el flujo?

  1. repetir(3) se ejecuta y retorna decorador

  2. decorador(hola) se ejecuta y retorna wrapper

  3. Al llamar hola(), en realidad se ejecuta wrapper()

  4. 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.


python
for _ in range(n):
    function()

¿Qué hace este bucle?

  • range(n): Crea una secuencia de números desde 0 hasta n-1

  • for _ 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 mismo

  • function(): 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:

  1. hola() se llama una vez

  2. El decorador intercepta esta llamada y ejecuta:

    python
    for _ in range(3):  # Se repite 3 veces
        hola()          # Ejecuta la función original
  3. Resultado en consola:

    text
    Hola mundo!
    Hola mundo!
    Hola mundo!

Sin el decorador sería:

python
# 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

Entradas populares de este blog

¿Qué es un Closure?

Funciones en Python: con y sin paréntesis

Calculadora de edad