es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo utilizar **kwargs como parámetro para decoradores en Python

Quiero saber en qué estoy fallando. Soy nuevo en decoradores de Python. ¿Cómo podemos pasar argumentos de palabras clave al decorador como parámetro?

import time
import math

def deco(x,y,*args,**kwargs): # Quiero pasar kwarg como="andrew" aquí 
    def short(func):
        def longer(r,*args,**kwargs):
            print("antes de ejecutar la función")
            begin = time.time()
            func(r)
            end = time.time()
            print("después de ejecutar la función")
            print("Soy",kwargs['like'])
            print("Tiempo total tomado en:", func.__name__, end - begin)
        return longer
    return short

@deco(3,4,like="andrew")
def greet(r):
    r = "Seré seleccionado"
    print(r)
    # print("Lo siento por exigir")

print(greet('r'))

Aquí, si intentamos pasar como =”andrew” para kwargs, da error. ¿Cómo lo paso a deco entonces?

También intenté esto.

def deco(x,y,like):
    def short(func):

¿Cuál es el error que cometí en los métodos anteriores?

Da error.
KeyError: ‘like’

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar argumentos de palabras clave al decorador como parámetro, podemos modificar la función ‘deco’ de la siguiente manera:

    import time
    
    def deco(x,y, **kwargs):
        def short(func):
            def longer(r,*args,**kwargs1):
                print("antes de la ejecución de la función")
                begin = time.time()
                func(r, **kwargs1) # pasar argumentos de palabras clave a la función decorada
                end = time.time()
                print("después de la ejecución de la función")
                print("Soy ", kwargs['like'])
                print("Tiempo total tomado en : ", func.__name__, end - begin)
            return longer
        return short
    

    Aquí estamos usando **kwargs para aceptar cualquier número de argumentos de palabras clave, y luego en la función decorada, estamos pasando todos los argumentos de palabras clave a la función original usando **kwargs1. En la función decorada, podemos acceder a los argumentos de palabras clave pasados al decorador usando el diccionario kwargs.

    Ahora podemos pasar el argumento de palabras clave ‘like’ al decorar la función de saludo de la siguiente manera:

    @deco(3,4,like="andrew")
    def greet(r, **kwargs):
        r = "Seré seleccionado"
        print(r)
    

    Aquí, también necesitamos agregar **kwargs a la definición de función de ‘greet’ para aceptar los argumentos de palabras clave pasados a él.

Comments are closed.