Los decoradores de Python son herramientas poderosas que nos permiten modificar o mejorar el comportamiento de funciones o métodos. Los casos de uso comunes incluyen registro, autorización y más.
Sin embargo, cuando se les pide que definan un decorador, muchos podrían decir:
Es un contenedor para una función.
Si bien esto es técnicamente correcto, están sucediendo muchas más cosas bajo el capó.
Disección de un decorador simple
Exploremos un ejemplo sencillo:
def my_decorator(func): def wrapper(*args, **kwargs): print("Before calling the function") result = func(*args, **kwargs) print("After calling the function") return result return wrapper @my_decorator def say_hello(name): print(f"Hello, {name}!")
Aquí, my_decorator es un decorador para la función say_hello. Cuando se define say_hello, se pasa automáticamente a my_decorator, transformando la llamada a la función en:
decir_hola = mi_decorador(di_hola)
¿Cuándo ocurre esta transformación?
Esta transformación ocurre durante la compilación del código, específicamente en el momento de la definición de la función, no en el momento de la ejecución.
Desmontando el código
Para comprender cómo funcionan los decoradores en un nivel inferior, podemos usar el módulo dis para examinar el código de bytes de la función decorada:
import dis @my_decorator def say_hello(name): print(f"Hello, {name}!") dis.dis(say_hello)
Desglose del código de bytes
La salida de dis.dis(say_hello) podría verse así:
Explicación del código de bytes
Antes de llamar a la función
Llamar a la función original
Después de llamar a la función
Conclusión
Los decoradores de Python son más que simples envoltorios de funciones; nos permiten modificar el comportamiento de la función en el momento de la definición. Al comprender cómo funcionan y examinar el código de bytes, podemos utilizar decoradores de manera más efectiva en nuestros proyectos.
¡Eso es todo por ahora! Si hay algo más en lo que te gustaría que profundizara, ¡házmelo saber!
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3