J'ai ensembles de valeurs que je veux appliquer en tant que paramètres à une fonction:Exécuter fonction sur toutes les combinaisons possibles de paramètres
params = {
'a': [1, 2, 3],
'b': [5, 6, 7],
'x': [None, 'eleven', 'f'],
# et cetera
}
Je veux courir myfunc()
avec toutes les combinaisons possibles, donc myfunc(a=1, b=5, x=None ...)
, myfunc(a=2, b=5, x=None ...)
.. myfunc(a=3, b=7, x='f' ...)
. Y at-il quelque chose (par exemple dans itertools
) qui peut aider? J'ai pensé utiliser itertools.product()
mais cela ne garde pas les noms des paramètres et me donne juste des tuples des combinaisons.
C'est très chouette! Je suis préoccupé par le fait que l'ordre soit éteint, puisque les dicts ne sont pas ordonnés (non?). Cela pourrait signifier que 'itertools.product()' renvoie les paramètres dans un ordre différent de celui des clés, ce qui entraînerait une discordance. – Bluefire
@Bluefire, 'myfunc (a = 1, b = 2, c = 3)', 'myfunc (b = 2, c = 3, a = 1)' les deux sont corrects. – falsetru
'map (params.get, keys)' est une façon inutilement verbeuse d'écrire 'params.values ()' ici; il est garanti que '.keys()' et '.values ()' s'aligneront sauf si le dictionnaire est modifié. – DSM