posiciones - Pasar un diccionario a una función en python como parámetros de palabras clave
ejercicios de diccionarios en python (4)
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?
Algunos detalles adicionales que pueden ser útiles para saber (preguntas que tuve después de leer esto y que fueron y probaron):
- La función puede tener parámetros que no están incluidos en el diccionario.
- No puede anular un parámetro que ya está en el diccionario
- El diccionario no puede tener parámetros que no estén en la función.
Ejemplos de cada uno:
def mytest(a=4, b=2):
print a, b
Número 1: la función puede tener parámetros que no están incluidos en el diccionario
In[6]: mydict = {''a'': 100}
In[7]: mytest(**mydict)
100 2
Número 2: no puede anular un parámetro que ya se encuentra en el diccionario
In[8]: mydict = {''a'': 100, ''b'': 200}
In[9]: mytest(a=3, **mydict)
TypeError: mytest() 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[10]: mydict = {''a'': 100, ''b'': 200, ''c'': 300}
In[11]: mytest(**mydict)
TypeError: mytest() got an unexpected keyword argument ''c''
Aquí tienes, funciona cualquier otro iterable:
d = {''param'' : ''test''}
def f(dictionary):
for key in dictionary:
print key
f(d)
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.
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)