2 votes

Passer une liste d'arguments à une fonction qui inclut des arguments de mots-clés

Je voudrais générer une grande liste de listes à passer à une fonction. Une partie de cela consiste à passer des arguments de mot-clé, mais je n'arrive pas à le faire fonctionner, car le dictionnaire de mots-clés est pris comme un argument positionnel :

mylist = [
['fromage', 'pain grillé', 'pain', {exempt=True}],
['bagel', 'pomme', 'flocons d'avoine', {exempt=True}],
]

for i in mylist:
    myfunc(*i)

def myfunc(first, *args, exempt=False, **kwargs):
   if exempt:
        return

J'espère que cela transmet l'idée. Est-il possible de mettre en œuvre ce genre d'approche ?

3voto

Sam Stafford Points 10894

Je suggérerais d'avoir une liste de paires args, kwargs, comme ceci :

mylist = [
    (['cheese', 'toast', 'bread'], {'exempt': True}),
    (['bagel', 'apple', 'oatmeal'], {'exempt': True}),
]

def myfunc(first, *args, exempt=False, **kwargs):
   if exempt:
        return

for args, kwargs in mylist:
    myfunc(*args, **kwargs)

Si vous êtes coincé avec mylist dans son format d'origine, vous pourriez faire ceci pour assigner proprement le dernier élément à kwargs et le reste à args :

for *args, kwargs in mylist:
    myfunc(*args, **kwargs)

mais vous devez alors être très certain que le dernier élément est toujours le dictionnaire kwargs (ou ajouter du code pour vérifier que c'est le cas et substituer un dictionnaire vide si ce n'est pas le cas).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X