123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253 |
- <!doctype html>
- <html lang=fr>
- <head>
- <!-- Always define the charset before the title -->
- <meta charset=utf-8>
- <title>Principales nouveautés dans Python 2.5 — 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/20060304-principales-nouveautes-dans-python-25">
-
- </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">Principales nouveautés dans Python 2.5</h1>
- <article typeof="schema:BlogPosting">
- <div property="schema:articleBody">
- <img src="/static/david/biologeek/images/logos/python.png" alt="vignette" style="float:left; margin: 0.5em 1em;" property="schema:thumbnailUrl" />
- <p>Je m'y prend un peu à l'avance (la sortie est prévue pour septembre 2006) mais Guido a apparement fait <a href="http://agiletesting.blogspot.com/2006/02/pycon-notes-part-2-guidos-keynote.html">quelques annonces lors de Pycon</a> qui viennent s'ajouter aux <a href="http://www.python.org/dev/doc/devel/whatsnew/whatsnew25.html"><abbr title="Python Enhancement Proposals">PEP</abbr>s approuvés sur la page officielle</a>. J'essayerais de mettre à jour ce billet lors de l'annonce de nouvelles nouveautés histoire qu'il ne soit pas obsolète dans 6 mois, n'hésitez pas à m'en informer.</p>
-
- <p>Voici la liste des <abbr title="Python Enhancement Proposals">PEP</abbr>s acceptés par ordre de soumission :</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0308/">308</a> : Ajout des expressions conditionnelles</h2>
-
- <p>Probablement pour remédier au difficilement compréhensible « <a href="http://diveintopython.adrahon.org/power_of_introspection/and_or.html#d0e10029">and-or trick</a> », même si <a href="http://mail.python.org/pipermail/python-dev/2005-September/056846.html">Guido a jugé bon de laisser une syntaxe assez difficile</a> pour des utilisations trop complexes intentionnellement (c'est vrai que le code devient vite illisible sinon).</p>
-
- <p>Syntaxe : expression1 <strong>if</strong> condition <strong>else</strong> expression2</p>
-
- <p>Exemples lisibles :</p>
-
- <pre>x = A if C else B
- x = lambda: A if C else B
- x = A if C else B if D else E</pre>
-
- <p>Exemples peu lisibles mais corrects :</p>
-
- <pre>if (A if C else B):
- [x for x in seq if (A if C else B)]
- A if (X if C else Y) else B
- (A if C else B) if D else E</pre>
-
- <p>Je sens que ça va faire fureur lors du « Annual Obfuscated Python Contest » !</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0309/">309</a> : L'application de fonctions partielles</h2>
-
- <p>Là je dois avouer que j'ai pas trop compris en quoi ça consistait mais c'est la <a href="http://www.python.org/dev/doc/devel/whatsnew/node2.html">première amélioration citée</a> dans What's New in Python 2.5 donc j'imagine que c'est assez important, j'attend vos explications ;-).</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0314/">314</a> : Méta-données pour les paquets Python</h2>
-
- <p>Bon le titre est assez explicite, un exemple :</p>
-
- <pre>Metadata-Version: 1.1
- Version: 1.0
- Platform: Linux2
- Supported-Platform: Ubuntu 5.10
- Summary: Mon premier paquet
- ...</pre>
-
- <p>Voila qui devrait ravir les concepteurs de paquets.</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0328/">328</a> : Imports absolus/relatifs</h2>
-
- <p><del>Outre le fait de permettre un import sur plusieurs lignes :</del></p>
-
- <pre>from Tkinter import Tk, Frame, Button, Entry, \
- LEFT, DISABLED, NORMAL, RIDGE, END</pre>
-
- <p>Pourra maintenant être déclaré ainsi :</p>
-
- <pre>from Tkinter import (Tk, Frame, Button, Entry,
- LEFT, DISABLED, NORMAL, RIDGE, END)</pre>
-
- <p><strong>[Edit du 06.03.06]</strong> : comme le souligne tarek dans les commentaires, cette fonctionnalité est déjà implémentée dans python 2.4.</p>
-
- <p>Cette amélioration permet aussi d'importer des modules relativement :</p>
-
- <pre>from ..subpackage1 import moduleY</pre>
-
- <p>Par exemple pour importer le <strong>moduleY</strong> qui serait un dossier parent <strong>subpackage1</strong>.</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0341/">341</a> : Unification de try-except et try-finally</h2>
-
- <p>C'est exactement ce dont j'ai besoin en ce moment, en effet j'utilise <strong>finally</strong> pour fermer les fichiers ouverts dans tous les cas et du coup j'ai quelque chose qui ressemble à :</p>
-
- <pre>f = None
- try:
- try:
- f = open(filename)
- text = f.read()
- except IOError:
- print 'An error occured'
- finally:
- if f:
- f.close()</pre>
-
- <p>Et c'est vraiment lourd, simplement car try-except-finally n'est pas possible actuellement, c'est ce que propose ce <abbr title="Python Enhancement Proposals">PEP</abbr> et ce sera donc réglé avec Python 2.5, ouf !</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0342/">342</a> : Coroutines par générateurs améliorés</h2>
-
- <p>Énormément d'améliorations relatives aux générateurs, ce serait trop long de tout décrire ici. En plus je n'en ai pas compris la moitié...</p>
-
- <h2><abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0343/">343</a> : Le mot-clé « with »</h2>
-
- <p><strong>with</strong> permet d'effectuer une opération sur un objet, par exeple dans le cas d'un fichier il permettra de le lire sans avoir à le fermer à la fin :</p>
-
- <pre>with open(filename) as f:
- f.read()</pre>
-
- <p>Cette syntaxe permettra de simplifier les ouvertures fermetures de fichiers sans avoir à gérer ça avec des exceptions. Elle sera aussi très utile en cas de vérrou à placer :</p>
-
- <pre>def locked(lock):
- lock.acquire()
- try:
- # mon opération
- finally:
- lock.release()</pre>
-
- <p>Deviendra :</p>
-
- <pre>with locked(myLock):
- # mon opération</pre>
-
- <p>C'est aussi une amélioration qui me servirait bien en ce moment ça...</p>
-
- <h2>Conclusion</h2>
-
- <p>Toutes ces améliorations sont très frustrantes car c'est exactement ce dont j'ai besoin <strong>maintenant</strong> ! Vivement septembre.</p>
-
- <p>Et pour fini <strong>lambda</strong> est <a href="http://mail.python.org/pipermail/python-dev/2006-February/060415.html">conservé, au grand regret de Guido...</a> et cElementTree est inséré dans la bibliothèque standard.</p>
-
- <p><strong>[Bonus]</strong> : une vidéo à voir absolument qui s'intitule <a href="http://oodt.jpl.nasa.gov/better-web-app.mov">Better Web App</a> (378.5mo, 36 minutes, anglais) et qui compare différent Web Frameworks (<abbr title="Ruby on Rails">RoR</abbr>, Zope/Plone, TurboGears et Django) et fourni en conclusion un tableau récapitulatif intéressant :</p>
-
- <p><img src="/static/david/biologeek/images/better_web_app.jpg" alt="Tableau comparatif entre les Web Frameworks" style="display:block; margin:0 auto;" /></p>
-
- <p><strong>[Edit du 06.03.06]</strong> : La home de <a href="http://www.python.org/">Python.org</a> est en pleine mue \o/ (en passant un <a href="http://linuxgazette.net/124/orr.html">lien intéressant</a> au sujet des nouveautés de Python 2.5).</p>
-
- <p><strong>[Edit du 11.03.06]</strong> : Le <abbr title="Python Enhancement Proposals">PEP</abbr> <a href="http://www.python.org/doc/peps/pep-0356/">356</a> résume tout ça et comprend le calendrier de développement (encore un bonus, l'<a href="http://www.eweek.com/article2/0,1895,1934746,00.asp">interview de <abbr title="Guido van Rossum">GvR</abbr> sur eweek</a>).</p>
-
- <p><strong>[Edit du 22.06.06]</strong> : L'annonce de <a href="http://linuxfr.org/~linuxcode/21967.html">Python 2.5 beta 1</a> sur dlfp qui est complétée de nombreux exemples (cette fois en bonus <a href="http://doxdesk.com/img/software/py/icons2.png">de beaux icônes</a> :-)).</p>
- </div>
- </article>
- <footer>
- <h6 property="schema:datePublished">— 04/03/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/20060425-python-et-underscore/" title="Accès à Python : lisibilité vs simplicité">Python : lisibilité vs simplicité</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">tarek</span> le <span class="comment-date" property="schema:commentTime">05/03/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Pour le PEP 328, l'import multiligne a déjà été implémenté dans Python 2.4</p>
- </div>
- </div>
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">S.F.</span> le <span class="comment-date" property="schema:commentTime">12/03/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Si j'ai bien compris, les fonctions partielles permettent de donner une valeur à un argument d'une fonction. Ainsi,<br />
- <br />
- g = functional.partial(f, arg1 = 1')<br />
- <br />
- serait équivalent à<br />
- <br />
- g = lambda x, y: f(1, x, y)</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">19/03/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>Merci pour ces précisions nud, c'était donc bien pour remplacer lambda.</p>
- </div>
- </div>
- <div class="comment" typeof="schema:UserComments">
- <p class="comment-meta">
- <span class="comment-author" property="schema:creator">David</span> le <span class="comment-date" property="schema:commentTime">31/07/2006</span> :
- </p>
- <div class="comment-content" property="schema:commentText">
- <p>sympa le "with locked", j'en aurai besoin NOW !</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>
|