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?

Calculadora de edad

Funciones en Python: con y sin paréntesis