Decorador de envíos en Python

Los decoradores son una herramienta muy poderosa y útil en Python, ya que permite a los programadores modificar el comportamiento de una función o clase. Los decoradores nos permiten envolver otra función para extender el comportamiento de la función envuelta, sin modificarla permanentemente.

Ejemplo:

# defining a decorator 
def hello_decorator(func): 
    
    # inner1 is a Wrapper function in  
    # which the argument is called 
        
    # inner function can access the outer local 
    # functions like in this case "func" 
    def inner1(): 
        print("Hello, this is before function execution") 
    
        # calling the actual function now 
        # inside the wrapper function. 
        func() 
    
        print("This is after function execution") 
            
    return inner1 
    
    
# defining a function, to be called inside wrapper 
def function_to_be_used(): 
    print("This is inside the function !!") 
    
    
# passing 'function_to_be_used' inside the 
# decorator to control its behavior 
function_to_be_used = hello_decorator(function_to_be_used) 
    
    
# calling the function 
function_to_be_used() 

Producción:

Hello, this is before function execution
This is inside the function !!
This is after function execution

Decorador de despacho

Se utiliza un decorador de Dispatch para seleccionar entre diferentes implementaciones del mismo método abstracto en función de la firma o lista de tipos.

Ejemplo:

# Python program to demonstrate
# dispatch decorator
  
from multipledispatch import dispatch
  
  
@dispatch(int)
def func(x):
    return x * 2
  
@dispatch(float)
def func(x):
    return x / 2
  
# Driver code
print(func(2))
print(func(2.0))

Producción:

4
1.0

En el ejemplo anterior, la @dispatch(int)declaración sugiere que Dispatcher ‘func’ se crea y luego asigna el tipo ‘int’ como clave y dispatcher ‘func’ como valor y lo asigna al i-ésimo índice en el espacio de nombres (diccionario).

Ahora todos deben preguntarse qué es un espacio de nombres. No se preocupe, echemos un vistazo al espacio de nombres.

espacio de nombres

Un espacio de nombres no es más que un diccionario que utiliza el decorador de envíos. El decorador de despacho crea un objeto de despacho con el nombre de la función y almacena este objeto como un par clave-valor. Este diccionario se usa para asignar funciones como funcen el ejemplo anterior a un objeto despachador como Disptacher('func').

De forma predeterminada, el espacio de nombres utilizado es el espacio de nombres global en multipledispatch.core.global_namespace. Para mayor seguridad, uno puede establecer sus propios espacios de nombres usando un diccionario.

Ejemplo:

from multipledispatch import dispatch
  
  
nsp = {}
  
@dispatch(int, namespace = nsp)
def func(x):
    return x * 2
  
@dispatch(float, namespace = nsp)
def func(x):
    return x / 2
  
# Driver code
print(func(2))
print(func(2.0))
print(nsp)

Producción:

4
1.0
{'func': <dispatched func>}

Publicación traducida automáticamente

Artículo escrito por riasehgal1999 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *