2011-08-08 16 views
8

¿Qué es la forma más pitonica para solucionar el siguiente problema? Desde el shell interactivo:¿La manera más pitónica de asignar argumentos de palabra clave usando una variable como palabra clave?

>>> 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 "<stdin>", line 1, in <module> 
TypeError: f() got an unexpected keyword argument 'kw' 

Por el momento estoy recibiendo alrededor de ella con lo siguiente:

>>> exec 'result = f(%s=val)' % kw 
>>> result 
'a was True' 

pero parece bastante torpe ...

(O Python 2.7+ o 3.2+ soluciones están bien)

Respuesta

4

En muchas circunstancias sólo puede utilizar

f(kw) 

como argumentos de palabras clave no tienen que ser especificado como palabras clave, si especifica todos los argumentos antes que ellos.

Python 3 tiene una sintaxis para keyword only arguments, pero eso no es lo que son de forma predeterminada.

O, sobre la respuesta de @ zeekay,

kw = 'a' 
f(**{kw: True}) 

si no desea almacenar kw como un diccionario, por ejemplo, si también lo está utilizando como clave en una búsqueda de diccionario en otro lugar.

Cuestiones relacionadas