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?

248
demandé sur Gabriel 2008-12-02 19:49:11

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)
402
répondu Dave Hillier 2009-08-11 15:13:15

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é):

  1. la fonction peut avoir des paramètres qui sont pas inclus dans le dictionnaire
  2. Vous pouvez pas remplacer un paramètre qui est déjà dans le dictionnaire
  3. 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'
47
répondu David Parks 2018-08-15 16:24:51

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.

29
répondu llimllib 2014-04-28 21:24:43

Ici ya go - fonctionne tout autre objet iterable:

d = {'param' : 'test'}

def f(dictionary):
    for key in dictionary:
        print key

f(d)
3
répondu Patrick Harrington 2008-12-02 16:52:20