• [^] # Re: Python se rapproche du Perl ?

    Posté par (site web personnel, Mastodon) . En réponse à la dépêche Python 3.8 : opérateur d’assignation, REPL async, Pickle v5 et plus. Évalué à 4. Dernière modification le 06 novembre 2019 à 17:32.

    C'est surtout que l'exemple initial est discutable:
    https://www.python.org/dev/peps/pep-0572/#the-importance-of-real-code

    Another example illustrates that programmers sometimes do more work to save an extra level of indentation:

     match1 = pattern1.match(data)
     match2 = pattern2.match(data)
     if match1:
     result = match1.group(1)
     elif match2:
     result = match2.group(2)
     else:
     result = None

    This code tries to match pattern2 even if pattern1 has a match (in which case the match on pattern2 is never used). The more efficient rewrite would have been:

     match1 = pattern1.match(data)
     if match1:
     result = match1.group(1)
     else:
     match2 = pattern2.match(data)
     if match2:
     result = match2.group(2)
     else:
     result = None

    Avec ce code "amélioré", on se retrouve avec autant de if/else imbriqués et donc de niveaux d'indentation qu'on a de motifs...

    Pour éviter l'indentation, j'aurais fait une sous-fonction et fait du early return:

     match1 = pattern1.match(data)
     if match1:
     return match1.group(1)
     match2 = pattern2.match(data)
     if match2:
     return match2.group(2)
     return None

    Après j'ai pas de soucis avec la nouvelle syntaxe que je découvre aujourd'hui, mais il y a peut être des bonnes pratiques ou avertissement issus d'analyseurs statiques de code qui auraient pu aider à corriger ce problème plutôt que le langage lui même.