Partage
  • Partager sur Facebook
  • Partager sur Twitter

j'ai crer Switch en python (commentaire)

merci des commentaires

    22 novembre 2020 à 15:02:45



    Bonjour, j' ai vue que il y avait souvent Switch dans les autres langages alors j'ai fais mon propre Switch en python:

    def Case(switch):
        def case(elt, fun):
            if switch.elt == elt:
                fun()
        return case
    class Switch(object):
        def __init__(self, nb):
            self.elt = nb
        def __enter__(self):
            return Case(self) 
        def __exit__(self,error, n,s):
            pass
    
    

    un exemple :

    def coucou():
        print("coucou")
    with Switch(4) as test:
        test(3, coucou)
        test(4, coucou)
        test(5, coucou)
    

    et ca affiche :

    coucou

    merci des commentaires que vous me donnez 



    -
    Edité par Le programmeur solitaire 30 novembre 2020 à 20:01:55

    • Partager sur Facebook
    • Partager sur Twitter

    le code FAIT le bonheur (pour moi en tous cas)

      23 novembre 2020 à 8:08:36

      Je pense qu'on peut le faire avec un dictionnaire dont la clé est le case, et la valeur est une fonction à laquelle on passe un paramètre
      switch = {1: f1, 2: f2, 3: f3}
      switch.get( int(input("Fonction: ")), f4) (int(input("Valeur: ")))
      f4 est la fonction appelée pour le default.
      • Partager sur Facebook
      • Partager sur Twitter

      Le Tout est souvent plus grand que la somme de ses parties.

        23 novembre 2020 à 9:25:06

        J'aime bien, par contre tu ne peux pas récup la valeur retournée par fun
        Alors que tu peux avec un dict.

        -
        Edité par thelinekioubeur 23 novembre 2020 à 9:25:17

        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2020 à 9:31:56

          Et le problème du dict c'est qu'il est entièrement évalué contrairement à if/elif/else.
          • Partager sur Facebook
          • Partager sur Twitter

          Python c'est bon, mangez-en. 

            24 novembre 2020 à 12:40:02

            Le pattern-matching qui arrivera peut-être dans la prochaine version de Python pourrait t'intéresser.

            • Partager sur Facebook
            • Partager sur Twitter
              24 novembre 2020 à 13:41:16

              josmiley a écrit:

              Et le problème du dict c'est qu'il est entièrement évalué contrairement à if/elif/else.


              Oui mais ses fonctions ne sont pas toutes exécutées ...

              -
              Edité par thelinekioubeur 24 novembre 2020 à 13:41:32

              • Partager sur Facebook
              • Partager sur Twitter
                24 novembre 2020 à 17:35:08

                @entwanne:
                En quoi le pattern matching va-t-il aider pour simuler un switch?
                @josmiley:
                Est-ce un problème ou une solution que d'utiliser un dictionnaire comme je l'ai suggéré?
                • Partager sur Facebook
                • Partager sur Twitter

                Le Tout est souvent plus grand que la somme de ses parties.

                  24 novembre 2020 à 18:33:54

                  1011112

                  -
                  Edité par __p_b2cs 4 décembre 2020 à 11:13:48

                  • Partager sur Facebook
                  • Partager sur Twitter
                    24 novembre 2020 à 18:46:39

                    @entwanne:
                    Peux-tu donner un exemple simple?
                    Fais-tu un re.search() avec une fonction?
                    Genre "abc|def|ghi" ?
                    Si ça match la fonction est appelée et retourne la chaîne de remplacement, sinon la condition n'est pas remplie (default).
                    • Partager sur Facebook
                    • Partager sur Twitter

                    Le Tout est souvent plus grand que la somme de ses parties.

                      24 novembre 2020 à 19:32:51

                      Je n'ai pas compris ce que tu attendais comme fonction, mais voilà un exemple utilisant re.search :

                      import re
                      
                      value = 'abc'
                      # value = 'x'
                      
                      match re.search(r'abc|def|ghi', value):
                          case re.Match():
                              print('match')
                          case _:
                              print('no match')
                      

                      À tester sur https://mybinder.org/v2/gh/gvanrossum/patma/master?urlpath=lab/tree/playground-622.ipynb

                      (l'implémentation finale pourra différer)

                      -
                      Edité par entwanne 24 novembre 2020 à 19:35:07

                      • Partager sur Facebook
                      • Partager sur Twitter
                        24 novembre 2020 à 19:40:44

                        entwanne a écrit:

                        Le pattern-matching qui arrivera peut-être dans la prochaine version de Python pourrait t'intéresser.


                        Cool, un truc à la Haskell 🙂

                        @PierrotLeFou

                        C'est une solution que j'utilise parfois.

                        -
                        Edité par josmiley 24 novembre 2020 à 19:48:30

                        • Partager sur Facebook
                        • Partager sur Twitter

                        Python c'est bon, mangez-en. 

                          25 novembre 2020 à 2:03:22

                          Et moi qui étais tout fier d'être sur Python 3.9 ...
                          Mais la version 3.10 est encore en beta?
                          https://www.python.org/downloads/release/python-3100a1/
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Le Tout est souvent plus grand que la somme de ses parties.

                            30 novembre 2020 à 20:19:29

                             
                             


                            bonjour nouvelle mise a jour de mon code:

                            def Case(switch):
                                def case(elt, fun, *args, **kwargs):
                                    
                                    if switch.elt == elt:
                                        fun(*args, **kwargs)
                                return case
                            def CaseList(switch):
                                def case(listeNb,fun,default=None ,*args, **kwargs):
                                    liste = []
                                    nb = 0
                                    for i in listeNb:
                                        if switch.elt == i:
                                            liste.append(fun(*args, **kwargs))
                                            nb += 1
                                    if not default is None and nb == 0:
                                        default()
                                    return liste
                                return case
                                            
                                    
                            class Switch(object):
                                def __init__(self, nb, choixCase):
                                    self.elt = nb
                                    
                                    self.choixCase = choixCase
                                def __enter__(self):
                                    if self.choixCase == "list":
                                        case = CaseList(self)
                                    else:
                                        case = Case(self)
                                    return case
                                def __exit__(self,error, n,s):
                                    pass
                            

                            exemple:

                            def afficher():
                                print("coucou")
                                
                            def hello():
                                print("hello")
                            with  Switch(4, "list") as test:
                                test([3, 1, 0], afficher,default=hello)
                                test([1, 4, 2], afficher,default=hello)



                            ça affiche:

                            hello
                            coucou



                            merci pour vos commentaire:D


                            -
                            Edité par Le programmeur solitaire 30 novembre 2020 à 20:33:49

                            • Partager sur Facebook
                            • Partager sur Twitter

                            le code FAIT le bonheur (pour moi en tous cas)

                            j'ai crer Switch en python (commentaire)

                            × 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