Partage
  • Partager sur Facebook
  • Partager sur Twitter

Un "else" dans un dictionary mapping ?

Sujet résolu
    20 novembre 2010 à 21:03:25

    Salut à tous,

    Voilà ce que je fais pour substituer un switch/case en phyton :

    functions = {'BBBB': function_1,
                         'VVVV': function_2,
                         'AAAA': function_3}
    
            func = functions[sys.argv[1]]
            func()
    


    Seulement voilà, si l'utilisateur entre en argument autre que ces trois possibilités, une erreur surgit. Est-il possible de rajouter qqchose pour dire : "pour tout autre valeur que ces trois la renvoyer à la fonction 4".

    Merci merci !
    • Partager sur Facebook
    • Partager sur Twitter
      20 novembre 2010 à 21:05:49

      Tu pourrais utiliser les exceptions :

      try:
          functions[sys.argv[1]]()
      except KeyError:
          # ce que tu veux
      
      • Partager sur Facebook
      • Partager sur Twitter
        20 novembre 2010 à 21:08:15

        Oui, avec la méthode get :

        func = functions.get(sys.argv[1], function_4)
        • Partager sur Facebook
        • Partager sur Twitter
        Zeste de Savoir, le site qui en a dans le citron !
          20 novembre 2010 à 21:09:39

          'faut vraiment que je m'attarde un peu plus sur la bibliothèque standard de Python, y'a vraiment des trucs bien !
          • Partager sur Facebook
          • Partager sur Twitter
            20 novembre 2010 à 21:16:27

            réponses rapides et nickelles ! Merci à vous.
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              21 novembre 2010 à 11:50:14

              Voir aussi defaultdict, qui fait un peu plus.

              Et pour éventuellement rajouter de la mémoire :

              >>> from collections import defaultdict
              >>> def maker():
              ...   x = 0
              ...   def ret():
              ...     nonlocal x
              ...     x += 1
              ...     return x
              ...   return ret
              ... 
              >>> d = defaultdict(maker())
              >>> d["foo"]
              1
              >>> d["foo"]
              1
              >>> d["bar"]
              2
              >>> d["schön"]
              3
              
              • Partager sur Facebook
              • Partager sur Twitter

              Un "else" dans un dictionary mapping ?

              × 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