Decoradores en Python

Decoradores en Python

Python

Los decoradores de Python son una herramienta que nos ayudará a reducir líneas de código.

Simplificando, un decorador de Python es una función (decoradora), a la que pasaremos como parámetro otra función (normal), así como sus argumentos si los tuviera.

Esta funcionalidad nos permite modificar el comportamiento de nuestra función desde la función decoradora.

Al fin y al cabo, «decorar» significa modificar, añadiendo o quitando elementos.

Ejemplo 1

def example_1(parent_function):

	def add_msg(*args):
		print('The parameters of this operation: \n' + str(args[0]) +', ' + str(args[1]) )
		parent_function(*args)

	return add_msg

Este es un ejemplo de decorador. Definimos una función que recibe un único parámetro (la función a la que decora) y que contiene otra función que realiza lo que necesitamos.

En este caso, mostrará un mensaje y los dos parámetros de esa función. Estos parámetros los tenemos gracias a utilizar *args. Si comprobamos el tipo de esta variable, veremos que es una tupla.

La función decoradora la utilizaremos de esta manera:

@example_1
def multiply(num1, num2):
	print(num1*num2)

multiply(2, 10)

En este caso el número de parámetros es dos, y son simples. Es decir, no son parámetros formados por clave -valor.

El resultado sería el siguiente:

The parameters of this operation:
2, 10
20

Ejemplo 2

def example_2(parent_function):

	def add_msg(**kwargs):
		print('The parameters of this operation: ')
		
		for key, value in kwargs.items():
			print(str(key) + ' : ' + str(value))
		
		print('And the result is: ')
		parent_function(**kwargs) 

	return add_msg

Este ejemplo, hace casi lo mismo que el ejemplo 1. La única diferencia es que utiliza los parámetros de forma clave-valor, **kwargs.

Lo llamaremos de la siguiente forma:

@example_2
def divide(param1, param2):
	print(param1/param2)

divide(param1 = 10, param2 = 5)

El resultado sería el siguiente:

The parameters of this operation:
param1 : 10
param2 : 5
And the result is:
2.0

El código anterior podremos ejecutarlo sin problemas en un único fichero, ya que aunque las funciones que hay dentro de cada función decoradora se llaman igual (add_msg), están aisladas dentro de su función.

De esta forma hemos creado dos funciones decoradoras de Python muy simples, pero que nos sirven para entender de una forma sencilla el funcionamiento de estas herramientas.

Leave a reply