Estoy soñando con un método de Python con argumentos explícitos de palabras clave:a encontrar las palabras clave de los argumentos de hecho pasan a un método de Python
def func(a=None, b=None, c=None):
for arg, val in magic_arg_dict.items(): # Where do I get the magic?
print '%s: %s' % (arg, val)
quiero conseguir un diccionario de sólo aquellos argumentos la persona que llama en realidad pasó en las método, al igual que **kwargs
, pero no quiero que la persona que llama pueda pasar ningún argumento aleatorio viejo, a diferencia de **kwargs
.
>>> func(b=2)
b: 2
>>> func(a=3, c=5)
a: 3
c: 5
Así que: ¿hay tal hechizo? En mi caso, soy capaz de comparar cada argumento con su valor predeterminado para encontrar los que son diferentes, pero esto es poco elegante y se vuelve tedioso cuando tienes nueve argumentos. Para los puntos de bonificación, proporcionar un encantamiento que me puede decir, incluso cuando la persona que llama pasa en un argumento de palabra clave asignada su valor por defecto:
>>> func(a=None)
a: None
Tricksy!
Editar: La firma de función (léxica) debe permanecer intacta. Es parte de una API pública, y el valor principal de las palabras clave explícitas radica en su valor documental. Solo para hacer las cosas interesantes. :)
Esta pregunta tiene un título muy similar, pero no estoy del todo seguro de si es un duplicado: http://stackoverflow.com/questions/196960/can-you-list-the-keyword-arguments-a-python -función-recibe –
@AndersonGreen. La pregunta que mencionas no tiene nada que ver con esto. Pregunta acerca de cómo filtrar un diccionario al pasar con ** notación a un método que no aceptaría todas las palabras clave. –
Esta es una gran pregunta. –