Pasar un diccionario a una función como parámetros de palabras clave

Me gustaría llamar a una función en python usando un diccionario.

Aquí hay un código:

d = dict(param='test') def f(param): print param f(d) 

Esto imprime {'param': 'test'} pero me gustaría que solo imprima la test .

Me gustaría que funcione de manera similar para más parámetros:

 d = dict(p1=1, p2=2) def f2(p1,p2): print p1, p2 f2(d) 

es posible?

Lo descubrí por mí mismo al final. Es simple, me faltaba el operador ** para descomprimir el diccionario

Entonces mi ejemplo se convierte en:

 d = dict(p1=1, p2=2) def f2(p1,p2): print p1, p2 f2(**d) 
 In[1]: def myfunc(a=4, b=2): In[2]: print a, b In[3]: mydict = {'a': 100, 'b': 200} In[4]: myfunc(**mydict) 100 200 

Algunos detalles adicionales que podrían ser útiles para saber (preguntas que tuve después de leer esto y que fueron y probaron):

  1. La función puede tener parámetros que no están incluidos en el diccionario.
  2. No puede anular un parámetro que ya está en el diccionario
  3. El diccionario no puede tener parámetros que no estén en la función.

Ejemplos:

Número 1: la función puede tener parámetros que no están incluidos en el diccionario

 In[5]: mydict = {'a': 100} In[6]: myfunc(**mydict) 100 2 

Número 2: no puede anular un parámetro que ya esté en el diccionario

 In[7]: mydict = {'a': 100, 'b': 200} In[8]: myfunc(a=3, **mydict) TypeError: myfunc() got multiple values for keyword argument 'a' 

Número 3: El diccionario no puede tener parámetros que no estén en la función.

 In[9]: mydict = {'a': 100, 'b': 200, 'c': 300} In[10]: myfunc(**mydict) TypeError: myfunc() got an unexpected keyword argument 'c' 

En Python, esto se denomina “desempaquetar”, y puedes encontrar un poco al respecto en el tutorial . La documentación de esto apesta, estoy de acuerdo, especialmente por lo fantásticamente útil que es.

Aquí tienes, funciona cualquier otro iterable:

 d = {'param' : 'test'} def f(dictionary): for key in dictionary: print key f(d)