Python : lisibilité vs simplicité

Tags associés : , , posté le 25 april 2006


Logo associé au billet intitulé Python : lisibilité vs simplicité

Le programmeur est fainéant. C'est ainsi. S'il ne l'était pas, il n'essayerait pas de s'aider d'un ordinateur. Du coup il évite dans la mesure du possible de s'encombrer de variables trop longues, ou d'appels répétitifs un peu trop élaborés. Heureusement, en Python, on peut simplifier tout ça. Mais la simplification peut mener à un manque de lisibilité dans certains cas. Un cas intéressant est celui de l'underscore.

La valeur précédente

Pas grand monde ne le sait mais testez de vous-même dans un shell :

>>> 8 + 2
10
>>> _
10

C'est très peu employé et ça rend le code très peu lisible, quitte a avoir une variable temporaire rappelant la dernière valeur autant qu'on comprenne de quoi il retourne. Surtout qu'il est possible d'attribuer d'autres fonctions à l'underscore.

Variable temporaire inutile

L'underscore est souvent utilisé pour créer des listes de liste :

>>> [[0] for _ in range(3)]
[[0], [0], [0]]

Vous vous demandez peut-être pourquoi ne pas faire un simple :

>>> [[0]] * 3

Tout simplement car ça crée des copies de listes et non des nouvelles listes donc si vous en modifiez une, ça se répercute sur les autres.

Il peut être aussi utilisé pour des fonctions renvoyant trop d'information, par exemple dans :

>>> jour, mois, _ = date_actuelle()

Si l'on ne veut pas s'encombrer de l'année (en supposant que le troisième argument renvoyé par la fonction est l'année bien sûr...).

Ces utilisations ponctuelles sont pratiques et ne nuisent pas trop à la lisibilité du code.

Traduction avec gettext

import gettext
gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
gettext.textdomain('myapplication')
_ = gettext.gettext
# ...
print _('This is a translatable string.')

Ça par contre c'est très employé, et oui les programmeurs sont des fainéants ;-). C'est pas forcément lisible et ça demande un peu d'habitude mais il faut reconnaître que c'est bien pratique et que c'est devenu usage courant donc autant l'utiliser.

Utilisation à la place de self

C'est souvent demandé à Guido sur la mailing-list python et il est assez intransigeant là-dessus (et je suis d'accord avec lui). Python est un langage simple et on doit pas tomber dans les gri-gri de Perl (désolé pour les mongeurs dans l'assistance...). Alors bien sûr vous pouvez utiliser n'importe quel mot-clé à la place de self pour vos classes et plus il est court moins vous aurez à taper de caractère ensuite mais self est un bon compromis, il est à la fois court et lisible. Pensez aux personnes qui vont devoir relire un jour votre code (il est très probable que ce soit vous et que vous ayez évolué !), autant se baser sur un formalisme commun (parce que ça commence comme ça puis on se met à utiliser * à la place de yield et on finit avec un code illisible...).

Python est un des langages les plus lisible mais aussi un des plus paramétrable (j'entend par là entièrement redéfinissable au niveau des mots-clé, des fonctions, etc...). Essayez de ne pas suivre des méthodes reconnues pour être la clé de votre engagement à vie dans votre boîte ;-).

4 Commentaires

Aïe le retour du geek...
Je peux trop rien dire sur le fond, mais par contre...
Voilà ce que ça donne de poster à des heures indécentes de la nuit :
"C'est utilisation ponctuelle sont pratique et ne nuisent pas trop à la lisibilité du code."
Sans commentaire...

1 | Milou, le 26 April 2006 à 09h

Damn! Corrigé...

2 | David, biologeek, le 26 April 2006 à 09h

Pas mal le coup de l'underscore, je ne connaissais pas, très pratique :-)

3 | gapz, le 28 April 2006 à 13h

Ha mais si ya des bouts de Haskell, le Python c'est peut-être pas si mal alors (par contre faudrait patcher l'arbre généalogique des langages de programmation).

4 | Krunch, le 5 May 2006 à 20h

Ajouter un commentaire


Billets contextuels

Bonnes pratiques et astuces Python

Logo associé au billet intitulé Bonnes pratiques et astuces Python

Ça faisait un moment que je n'avais pas parlé des bonnes pratiques Python mais l'approche de Pycon fr (où je présenterai Django : le pourquoi et le comment le 18 mai), l'événement Python incontournable avec un programme des ...

Benchmarks map, filter vs. list-comprehensions

Logo associé au billet intitulé Benchmarks map, filter vs. list-comprehensions

Je viens de tomber sur les snyppets de Seb Sauvage (site que j'apprécie beaucoup par ailleurs) et il y a une phrase qui m'a interpellé sur le paragraphe consacré à zip, map, filter et aux list-comprehensions : Except that ...

Principales nouveautés dans Python 2.5

Logo associé au billet intitulé Principales nouveautés dans Python 2.5

Je m'y prend un peu à l'avance (la sortie est prévue pour septembre 2006) mais Guido a apparement fait quelques annonces lors de Pycon qui viennent s'ajouter aux PEPs approuvés sur la page officielle. J'essayerais ...


© 2004-2009 David Larlet - Licence (presque) libre - Site enfin propulsé par Django et hébergé par Typhon.