Partage
  • Partager sur Facebook
  • Partager sur Twitter

[python][fonction][arguments avec clé] ordre argum

ordre argument et parcours dictionnaire **arg

Sujet résolu
    5 mars 2016 à 19:09:28

    Bonjour,

    Il s'agit d'un constructeur avec un nombre indéterminé de paramètres nommés.

        def __init__(self, dictionnaire={}, **cleValeur) :
    

    Un appel avec plusieurs paramètres comme suit :

    legumes = DictionnaireOrdonne(carotte = 26, haricot = 48, patate=45, poireau=7)

    Dans le constructeur, je constate que le dictionnaire ne se parcourt pas dans l'ordre des paramètres nommés

            for cle,valeur in dictionnaire.items() : print( '__init__ : dico [', cle, "=", valeur, "]")
            for cle,valeur in cleValeur.items() : print( '__init__ : cleval [', cle, "=", valeur, "]")
    
    __init__ : cleval [ haricot = 48 ]
    __init__ : cleval [ carotte = 26 ]
    __init__ : cleval [ poireau = 7 ]
    __init__ : cleval [ patate = 45 ]

    Je comprends que lors de la traduction des paramètres, puis sur le parcours, l'ordre n'est pas garanti par la traduction en dictionnaire.

    Comment traiter ce passage de paramètres pour conserver l'ordre ?
    système -> Linux

    jeu d'instructions -> 32bit

    distribution -> #123-Ubuntu SMP Fri Feb 19 14:28:32 UTC 2016

    version python -> 3.4.3

    • Partager sur Facebook
    • Partager sur Twitter
      5 mars 2016 à 19:51:48

      Bonjour,

      Malheureusement, ça ne sera pas possible ainsi. Les arguments nommés envoyés à une fonction sont compilés en un dictionnaire (non ordonné, donc). Il n'est alors plus possible de connaître l'ordre initial des éléments quand tu récupères **kwargs.

      Des propositions d'amélioration pour ces cas spécifiques où l'ordre importe existent, mais ça n'est pas encore d'actualité : https://www.python.org/dev/peps/pep-0468/

      Ce que je peux te proposer est de passer à ton constructeur des couples (clef, valeur), l'ordre des arguments positionnels étant assuré, puis de construire ton OrderedDict à la récupération.

      • Partager sur Facebook
      • Partager sur Twitter
        6 mars 2016 à 3:31:43

        Bonjour,

        Effectivement, il y a discussion.

        Merci pour le lien et la solution

        • Partager sur Facebook
        • Partager sur Twitter

        [python][fonction][arguments avec clé] ordre argum

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown