Por fin escribamos nuestro propio decorador.
Recuerde, un decorador sobrealimenta nuestra función.
Es simplemente una función que envuelve otra función y la mejora o la cambia, pero la mejor manera para mí
de explicar qué es es realmente codificar la nuestra.
Así que hagámoslo.
Definamos un my.
Decorador y este decorador van a aceptar una función de inmediato, debemos saber que esta es una
función de orden superior ahora aquí.
Dentro de aquí, vamos a llamar a la función, pero antes de hacer eso, vamos a envolver esta
función en otra función.
Entonces vamos a decir que defina la función de ajuste.
Así que esto es solo una envoltura y esta función de envoltura.
Va a ser una función que simplemente ejecuta este funk y finalmente devolverá wrap.
Función y observe aquí que no lo estoy llamando, solo lo estoy devolviendo para que luego alguien pueda
usarlo.
Bien, ahora digamos que tenemos una función simple, hola, y esta función simple, solo príncipe.
Hola, que función inútil.
Ahora, ¿por qué es útil esto, porque ahora puedo usar esto como decorador? Python tan pronto como escribamos una A delante de esto va a
decir, oye, este va a ser un decorador y el decorador, siempre y cuando
sigamos Se puede utilizar la sintaxis de aceptar una función, tener una función contenedora, llamar a la
función y devolver la función contenedora.
Entonces, si hago mi decorador, verás cómo es todo azul.
Ahora, este decorador se puede usar en la parte superior al definir nuestras funciones, por lo que si queremos usar mi
decorador en la función hola, lo usamos así para que cuando llame hola a continuación en mi programa.
Hago clic, corro.
Recibo hola.
Bien, sé lo que estás pensando, estás pensando que esto es una completa pérdida de tiempo, Andre.
¿Por qué tuve que hacer todo eso?
Podría haber hecho esto solo para encontrar el hola.
Y eso fue todo.
Estoy tan confundida.
Bueno, aquí está la cosa.
Lo que acabamos de hacer con el decorador.
No ha cambiado nada.
Funciona exactamente como se esperaba.
Pero lo que nos permite hacer es que ahora podemos agregar funcionalidad extra.
Recuerda que dije que decorador es una función como mi decorador que envuelve que aquí hay otra función, que es
la función que pasamos.
Y lo mejora, entonces, ¿cómo podemos mejorar el saludo?
Bueno, podemos hacer cualquier cosa dentro de esta función envuelta, por ejemplo, puedo decir imprimir y
luego imprimiremos algunas estrellas aquí y tal vez imprimiremos.
Otro juego de estrellas aquí para que cuando llame a Ron.
Boom, acabamos de aumentar nuestro saludo.
Función.
¿Cuan genial es eso?
Y esta es la razón por la que los decoradores son útiles simplemente agregando esta línea, puedo súper impulsar una función para
que digamos que creo otra función llamada.
Por y esta compra se va a imprimir.
Te veo luego.
Llamando aquí y haciendo clic en ejecutar.
Bueno, nada cambia, pero si quisiera súper impulsarlo, al igual que el hola, todo lo que necesito
hacer es copiar el decorador y usarlo aquí también para que si lo ejecute.
Ahí vamos, hemos súper impulsado nuestro.
Este es el poder del decorador con solo usar esta sintaxis, puedo agregar funcionalidad adicional a otras
funciones.
Ahora, sé lo que estás pensando y sé que también sigo diciendo eso mucho, es como si pudiera leer la mente,
pero.
Estás pensando que esto es mucha magia, ¿cómo hace todo esto el intérprete de Python?
Parece, bueno, magia, ¿verdad?
Debajo del capó, todo lo hace bien, déjame mostrarte, basándome en lo que hemos aprendido hasta ahora
sobre funciones, porque son ciudadanos de primera clase, ¿verdad?
Todo lo que estamos haciendo es literalmente esto.
Estamos diciendo la variable A.
Es igual a hola.
Y envolviendo este hola y llamándolo con mi decorador.
Por eso digo mi decorador.
Y luego, después de eso, estoy ejecutando un programa como este.
Así que digamos que esto fue un saludo bueno, solo lo estoy ejecutando.
Al igual que.
Así que si ejecuto esto.
Todo sigue funcionando.
Todo lo que estoy haciendo es terminar mi función de saludo.
Con mi decorador y asignándolo a una variable.
Entonces, si vamos paso a paso, vemos que mi decorador recibe una función en nuestro caso,
la función hola, luego devuelve esta función reenvasada que tiene hola aquí.
Entonces devolvemos esta función de rata.
Así que hola ahora es igual a esta función envuelta y luego se llama a esta función envuelta.
Y con qué se llama.
Bueno, imprime esto, luego ejecuta la función de saludo y luego imprime esto.
Es lo mismo que hacer algo como esto.
Simplemente lo volvemos a llamar si ejecuto esto.
Funciona, parece extraño, ¿no? Pero debería tener sentido.
Estamos llamando a la primera función y la primera función devuelve otra función y luego llamamos a la
siguiente función devuelta, que es la función rep.
Ahora, la razón por la que los decoradores son útiles es porque en lugar de hacer esto y, francamente, parecer
confuso, puedo agregar el en mi decorador y no es necesario que hagamos todo esto.
Ah, hola.
Es envuelto automáticamente por mi decorador.
Pero esencialmente esto es lo que está haciendo el asignado.
Mira, no tiene nada de mágico.
Ahora, en este momento, esto es bueno, pero apuesto a que todavía se está preguntando por qué los decoradores son útiles.
Entonces, para finalizar realmente nuestra comprensión de los decoradores, tomemos un descanso y nos vemos en el
siguiente video.