Decoradores condicionales en Python

En Python, los decoradores son funciones o clases que envuelven una función como un envoltorio tomando una función como entrada y devolviendo un invocable. Permiten la creación de bloques de código de construcción reutilizables que pueden cambiar o ampliar el comportamiento de otras funciones.

Decoradores condicionales

Dada una condición, la idea aquí es ejecutar código o básicamente envolver una función usando un decorador si se cumple o es verdadera una determinada condición. Hay dos formas en las que podemos usar un decorador condicionalmente.

Método 1: cuando el decorador decide cómo envolver una función

  • En este caso la función se pasa a un decorador normalmente
  • Luego, según la condición, el decorador decide qué hacer con el código.

El siguiente programa pasa una función normalmente al decorador, luego, si la condición dada es verdadera, el programa devuelve la string en mayúsculas y si es falsa, la devuelve en minúsculas.

condition = True
  
def conditional_decorator(func):
      
    def wrapper():
        oldstring = func()
          
        if condition:
            newstring = oldstring.upper()
        else:
            newstring = oldstring.lower()
          
        return newstring
      
    return wrapper
  
@conditional_decorator
def func():
    return 'geeKSfoRGEEks'
  
print(func())

Producción:

'GEEKSFORGEEKS'

Método 2: en este, los decoradores son llamados solo si se cumple una determinada condición.

En el siguiente programa, el programa toma la entrada del usuario para decidir sobre la condición. Si el usuario ingresa 1, se llama al decorador y la string se devuelve en mayúsculas. Si el usuario ingresa 2, nuevamente se llama a un decorador y la string dada se devuelve en minúsculas. Aparte de esto, si se ingresa cualquier otro número, la función se devuelve tal como está sin ninguna modificación.

def decorator1(func):
      
    def wrapper():
        oldstring = func()
        newstring = oldstring.upper()
        return newstring
      
    return wrapper
  
def decorator2(func):
      
    def wrapper():
        oldstring = func()
        newstring = oldstring.lower()
        return newstring
      
    return wrapper
  
cond = 1
  
if cond == 1:
    @decorator1
    def func():
        return 'GeeksFORGeeKs'
elif cond == 2:
    @decorator2
    def func():
        return 'GeeksFORGeeKs'
else:
    def func():
        return 'GeeksFORGeeKs'
      
print(func())

Producción:

GEEKSFORGEEKS

Publicación traducida automáticamente

Artículo escrito por vanshikagoyal43 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 *