¿Cuál es la forma más pirónica de solucionar el siguiente problema? Desde la shell interactiva:
>>> def f(a=False): ... if a: ... return 'a was True' ... return 'a was False' ... >>> f(a=True) 'a was True' >>> kw = 'a' >>> val = True >>> f(kw=val) Traceback (most recent call last): File "", line 1, in TypeError: f() got an unexpected keyword argument 'kw'
Por el momento me estoy moviendo con lo siguiente:
>>> exec 'result = f(%s=val)' % kw >>> result 'a was True'
pero parece bastante torpe …
(Cualquiera de las soluciones de Python 2.7+ o 3.2+ están bien)
Utilice el argumento de palabras clave desempaquetado :
>>> kw = {'a': True} >>> f(**kw) <<< 'a was True'
En muchas circunstancias puedes usar
f(kw)
como argumentos de palabras clave no tienen que especificarse como palabras clave, si especifica todos los argumentos antes de ellos.
Python 3 tiene una syntax para los argumentos de palabra clave solamente , pero eso no es lo que son de forma predeterminada.
O, basándose en la respuesta de @zeekay,
kw = 'a' f(**{kw: True})
si no desea almacenar kw como un dict, por ejemplo, si también lo está utilizando como clave en una búsqueda de diccionario en otro lugar.