123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- <!doctype html>
- <html lang=fr>
- <head>
- <!-- Always define the charset before the title -->
- <meta charset=utf-8>
- <title>Python : lisibilité vs simplicité — Biologeek — David Larlet</title>
- <!-- Define a viewport to mobile devices to use - telling the browser to assume that the page is as wide as the device (width=device-width) and setting the initial page zoom level to be 1 (initial-scale=1.0) -->
- <meta name="viewport" content="width=device-width, initial-scale=1"/>
- <!-- Fake favicon, to avoid extra request to the server -->
- <link rel="icon" href="data:;base64,iVBORw0KGgo=">
- <link type="application/atom+xml" rel="alternate" title="Feed" href="/david/log/" />
- <link rel="manifest" href="/manifest.json">
-
- <link rel="stylesheet" href="/static/david/css/larlet-david-_J6Rv.css" data-instant-track />
-
- <noscript>
- <style type="text/css">
- /* Otherwise fonts are loaded by JS for faster initial rendering. See scripts at the bottom. */
- body {
- font-family: 'EquityTextB', serif;
- }
- h1, h2, h3, h4, h5, h6, time, nav a, nav a:link, nav a:visited {
- font-family: 'EquityCapsB', sans-serif;
- font-variant: normal;
- }
- </style>
- </noscript>
-
- <!-- Canonical URL for SEO purposes -->
- <link rel="canonical" href="https://larlet.fr/david/biologeek/archives/20060425-python-et-underscore">
-
- </head>
- <body>
- <div>
-
- <header>
- <nav>
- <p>
- <small>
- Je suis <a href="/david/" title="Profil public">David Larlet</a>, <a href="/david/pro/" title="Activité professionnelle">artisan</a> du web qui vous <a href="/david/pro/accompagnement/" title="Activité d’accompagnement">accompagne</a><span class="more-infos"> dans l’acquisition de savoirs pour concevoir des <a href="/david/pro/produits-essentiels/" title="Qu’est-ce qu’un produit essentiel ?">produits essentiels</a></span>. <span class="more-more-infos">Discutons ensemble d’une <a href="/david/pro/devis/" title="En savoir plus">non-demande de devis</a>.</span> Je partage ici mes <a href="/david/blog/" title="Expériences bienveillantes">réflexions</a> et <a href="/david/correspondances/2017/" title="Lettres hebdomadaires">correspondances</a>.
- </small>
- </p>
- </nav>
- </header>
-
-
- <section>
- <h1 property="schema:name">Python : lisibilité vs simplicité</h1>
- <article typeof="schema:BlogPosting">
- <div property="schema:articleBody">
- <img src="/static/david/biologeek/images/logos/python_nouveau.png" alt="vignette" style="float:left; margin: 0.5em 1em;" property="schema:thumbnailUrl" />
- <p>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.</p>
-
- <h2>La valeur précédente</h2>
-
- <p>Pas grand monde ne le sait mais testez de vous-même dans un shell :</p>
-
- <pre>>>> 8 + 2
- 10
- >>> _
- 10</pre>
-
- <p>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.</p>
-
- <h2>Variable temporaire inutile</h2>
-
- <p>L'underscore est souvent utilisé pour créer des listes de liste :</p>
-
- <pre>>>> [[0] for _ in range(3)]
- [[0], [0], [0]]</pre>
-
- <p>Vous vous demandez peut-être pourquoi ne pas faire un simple :</p>
-
- <pre>>>> [[0]] * 3</pre>
-
- <p>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.</p>
-
- <p>Il peut être aussi utilisé pour des fonctions renvoyant trop d'information, par exemple dans :</p>
-
- <pre>>>> jour, mois, _ = date_actuelle()</pre>
-
- <p>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...).</p>
-
- <p>Ces utilisations ponctuelles sont pratiques et ne nuisent pas trop à la lisibilité du code.</p>
-
- <h2>Traduction avec gettext</h2>
-
- <pre>import gettext
- gettext.bindtextdomain('myapplication', '/path/to/my/language/directory')
- gettext.textdomain('myapplication')
- _ = gettext.gettext
- # ...
- print _('This is a translatable string.')</pre>
-
- <p>Ç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.</p>
-
- <h2>Utilisation à la place de self</h2>
-
- <p>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 <em>pouvez</em> 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 <strong>self</strong> 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 <strong>*</strong> à la place de <strong>yield</strong> et on finit avec un code illisible...).</p>
-
- <p>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 <a href="http://www.thc.org/root/phun/unmaintain.html">clé de votre engagement à vie dans votre boîte</a> ;-).</p>
- </div>
- </article>
- <footer>
- <h6 property="schema:datePublished">— 25/04/2006</h6>
- </footer>
- </section>
- <section>
- <div>
- <h3>Articles peut-être en rapport</h3>
- <ul>
- <li><a href="/david/biologeek/archives/20080511-bonnes-pratiques-et-astuces-python/" title="Accès à Bonnes pratiques et astuces Python">Bonnes pratiques et astuces Python</a></li>
- <li><a href="/david/biologeek/archives/20061025-benchmarks-map-filter-vs-list-comprehensions/" title="Accès à Benchmarks map, filter vs. list-comprehensions">Benchmarks map, filter vs. list-comprehensions</a></li>
- <li><a href="/david/biologeek/archives/20060304-principales-nouveautes-dans-python-25/" title="Accès à Principales nouveautés dans Python 2.5">Principales nouveautés dans Python 2.5</a></li>
- </ul>
- </div>
- </section>
- <section>
- <div id="comments">
- <h3>Commentaires</h3>
-
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">Milou</span> le <span class="comment-date" property="schema:commentTime">26/04/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Aïe le retour du geek...<br />
- Je peux trop rien dire sur le fond, mais par contre...<br />
- Voilà ce que ça donne de poster à des heures indécentes de la nuit :<br />
- "C'est utilisation ponctuelle sont pratique et ne nuisent pas trop à la lisibilité du code."<br />
- Sans commentaire...<br />
- <br />
- </p>
- </div>
- </div>
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">David, biologeek</span> le <span class="comment-date" property="schema:commentTime">26/04/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Damn! Corrigé...</p>
- </div>
- </div>
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">gapz</span> le <span class="comment-date" property="schema:commentTime">28/04/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Pas mal le coup de l'underscore, je ne connaissais pas, très pratique :-) </p>
- </div>
- </div>
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">Krunch</span> le <span class="comment-date" property="schema:commentTime">05/05/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>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).</p>
- </div>
- </div>
-
- </div>
- </section>
-
-
- <footer>
- <nav>
- <p>
- <small>
- Je réponds quasiment toujours aux <a href="mailto:david%40larlet.fr" title="Envoyer un email">emails</a> (<a href="/david/signature/" title="Ma signature actuelle avec possibilité de chiffrement">signés</a>) et vous pouvez me rencontrer à Montréal. <span class="more-infos">N’hésitez pas à <a href="/david/log/" title="Être tenu informé des mises à jour">vous abonner</a> pour être tenu informé des publications récentes.</span>
- </small>
- </p>
- </nav>
- </footer>
-
- </div>
-
- <script src="/static/david/js/larlet-david-3ee43f.js" data-no-instant></script>
-
- <script data-no-instant>InstantClick.init()</script>
-
- </body>
- </html>
|