Passer un dictionnaire à une fonction en python comme paramètres de mots clés
j'aimerais appeler une fonction en python en utilisant un dictionnaire.
voici un code:
d = dict(param='test')
def f(param):
print param
f(d)
ça imprime {'param': 'test'}
mais je voudrais juste qu'il imprime test
.
j'aimerais qu'il fonctionne de la même façon pour plus de paramètres:
d = dict(p1=1, p2=2)
def f2(p1,p2):
print p1, p2
f2(d)
est-ce possible?
4 réponses
a finalement compris pour moi-même. C'est simple, il me manquait juste l'opérateur ** pour déballer le dictionnaire
ainsi mon exemple devient:
d = dict(p1=1, p2=2)
def f2(p1,p2):
print p1, p2
f2(**d)
quelques détails supplémentaires qui pourraient être utiles à savoir (questions que j'ai eues après avoir lu ceci et que j'ai testé):
- la fonction peut avoir des paramètres qui sont pas inclus dans le dictionnaire
- Vous pouvez pas remplacer un paramètre qui est déjà dans le dictionnaire
- Le dictionnaire pas avoir des paramètres qui ne sont pas dans le fonction.
exemples de chacun:
def mytest(a=4, b=2):
print a, b
Nombre 1: La fonction peut avoir des paramètres qui ne sont pas inclus dans le dictionnaire
In[6]: mydict = {'a': 100}
In[7]: mytest(**mydict)
100 2
Nombre 2: Vous ne pouvez pas remplacer un paramètre qui est déjà dans le dictionnaire
In[8]: mydict = {'a': 100, 'b': 200}
In[9]: mytest(a=3, **mydict)
TypeError: mytest() got multiple values for keyword argument 'a'
numéro 3: le dictionnaire ne peut pas avoir de paramètres qui ne sont pas dans la fonction.
In[10]: mydict = {'a': 100, 'b': 200, 'c': 300}
In[11]: mytest(**mydict)
TypeError: mytest() got an unexpected keyword argument 'c'
en python, cela s'appelle" unpacking", et vous pouvez en trouver un peu dans le" tutoriel . La documentation craint, je suis d'accord, surtout à cause de son utilité fantastique.
Ici ya go - fonctionne tout autre objet iterable:
d = {'param' : 'test'}
def f(dictionary):
for key in dictionary:
print key
f(d)