Partage
  • Partager sur Facebook
  • Partager sur Twitter

que veut dire: if not (expression)

Sujet résolu
    22 septembre 2019 à 16:32:39

    bonjour,

    je code avec pycharm, pycharm fait des inspections du code, et ayant écrit un équivalent de ceci:

    liste = [a, b, c, d]
    if [i for i in liste if i != " "] == []:  # si la liste est vide ou composée d'espaces
        print("la liste est vide")
    

    pycharm me propose de simplifier l'expression en:

    if not ([i for i in self.name_list if i != " "]):
        print("la liste est vide")

    ?????

    ([i for i in self.name_list if i != " "]) ne renvoi pas True ou False, c'est une liste non ?

    si quelqu'un peut m'expliquer cette syntaxe

    merci.




    • Partager sur Facebook
    • Partager sur Twitter
      22 septembre 2019 à 17:00:26

      Ce que propose Pycharm est équivalent à dire "Si la liste ne comporte pas d'élément..."

      C'est une bonne pratique à appliquer comparée à ce que tu proposes de faire effectivement.

      • Partager sur Facebook
      • Partager sur Twitter

      Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
      La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

        22 septembre 2019 à 17:12:11

        je voie, mais nul par je ne spécifie la liste, à examiner non ? l'expression est (il me semble) un équivalent de ceci: if not [] qui n'a pas vraiment de sens.
        • Partager sur Facebook
        • Partager sur Twitter
          22 septembre 2019 à 17:49:41

          C'est de la grammaire python, on peut le faire avec des dictionnaires, tuples, listes, et autres objets de ta création...

          Et tu spécifies bien la liste à examiner qui est [i for i in self.name_list if i != " "] ;)

          EDIT:

          C'est pas forcément explicite effectivement, implicitement on trouverait plus naturelle de vérifier la taille de la liste,

          if len([...]) ==0: 

          Cependant, la PEP8 qui est une convention mais très respectée des développeurs python, dit ceci

           donc on le respecte tout naturellement, puis c'est devenu un idiome dans ce langage et dans beaucoup d'autres

          -
          Edité par fred1599 22 septembre 2019 à 18:16:21

          • Partager sur Facebook
          • Partager sur Twitter

          Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
          La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

            22 septembre 2019 à 18:23:53

            ha ok merci, j'avais compris autre chose,

            donc c'est juste que "not iterable" renvoi True si l'iterable est vide et False dans le cas contraire ? mais alors c'est une méthode de la classe de l'iterable qui est appelé ? ou c'est juste que c'est python qui se charge de faire len(iterable) (en C, du coup ça va plus vite)?

            si c'est une méthode, il faut que l'"objet de ma création" que tu évoque hérite d'une manière ou d'une autre de cette méthode.

            -
            Edité par Blue_Badger 22 septembre 2019 à 18:26:45

            • Partager sur Facebook
            • Partager sur Twitter
              22 septembre 2019 à 18:37:36

              Je pense sans être sûr que tu dois surcharger la méthode __bool__ ça serait pas déconnant au vu de ce qui est indiqué dans la doc.

              • Partager sur Facebook
              • Partager sur Twitter

              Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
              La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

                22 septembre 2019 à 18:41:40

                yes merci hum j'aurai pu (du) chercher moi même:honte:

                en tous cas sujet résolut.

                • Partager sur Facebook
                • Partager sur Twitter
                  23 septembre 2019 à 0:20:18

                  Blue_Badger a écrit:

                  donc c'est juste que "not iterable" renvoi True si l'iterable est vide et False dans le cas contraire ? 

                  Juste : un itérable n'est pas forcément un conteneur et donc il se peut qu'un itérable it ne génère rien et que pourtant la valeur booléenne de it soit True. Cas typique avec it=iter(range(0)).
                  • Partager sur Facebook
                  • Partager sur Twitter
                    23 septembre 2019 à 13:38:47

                    PascalOrtiz a écrit:

                    Juste : un itérable n'est pas forcément un conteneur et donc il se peut qu'un itérable it ne génère rien et que pourtant la valeur booléenne de it soit True. Cas typique avec it=iter(range(0)).

                    bool(machin) se fout pas mal de ce que machin soit iterable (qui a une méthode __iter__) ou iterator (qui a une méthode __next__), ou un container (qui a une méthode __contains__), çà essaie d'évaluer __bool__ puis __len__ et si ces méthodes n'existent pas, çà retourne True.

                    • Partager sur Facebook
                    • Partager sur Twitter

                    que veut dire: if not (expression)

                    × 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