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’
davy.ai
Para pasar argumentos de palabras clave al decorador como parámetro, podemos modificar la función ‘deco’ de la siguiente manera:
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:
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.