? Para un decorador que estoy escribiendo me gustaría manipular un parámetro con nombre específico de una función. Considere el siguiente decorador:¿Cómo puedo tratar los argumentos posicionales como argumentos de palabra clave en Python 2
def square_param(param):
def func_decorator(func):
def func_caller(*args,**kwargs):
kwargs[param] = kwargs[param] * kwargs[param]
return func(*args,**kwargs)
return func_caller
return func_decorator
aplicados en la siguiente función:
@square_param('dividend')
def quotient(divisor=1,dividend=0):
return dividend/divisor
Esto funcionará si los dividendos se denomina como un argumento de palabra clave, por ejemplo:
>>> quotient(dividend=2)
4
Sin embargo, cuando se administra como un argumento posicional esto fracasará.
>>> quotient(3,4)
TypeError: quotient() got multiple values for keyword argument 'dividend'
con Python 3 que podía resolver esto forzando el parámetro a always given as a keyword:
@square_param('dividend')
def quotient(divisor=1,*,dividend=0):
return dividend/divisor
pero me gustaría apoyar a Python 2 y también me gustaría poner como pocas restricciones sobre la función .
¿Hay alguna manera de corregir este comportamiento en mi decorador?
Inspeccione el módulo de inspeccionar. Puede tener lo que necesita para esto. Eche un vistazo a getargspec. – Dirk