Repository with sources and generator of https://larlet.fr/david/ https://larlet.fr/david/
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  1. title: Formatage des chaînes de caractères en Python
  2. slug: formatage-des-chaines-de-caracteres-en-python
  3. date: 2006-01-21 20:59:27
  4. type: post
  5. vignette: images/logos/bonnes_pratiques_python.png
  6. contextual_title1: Bonnes pratiques et astuces Python
  7. contextual_url1: 20080511-bonnes-pratiques-et-astuces-python
  8. contextual_title2: Benchmarks map, filter vs. list-comprehensions
  9. contextual_url2: 20061025-benchmarks-map-filter-vs-list-comprehensions
  10. contextual_title3: Python : lisibilité vs simplicité
  11. contextual_url3: 20060425-python-et-underscore
  12. <p>À l'intersection entre bonnes pratiques et optimisation comment afficher des chaînes de caractère en Python&nbsp;? Privillégier la lisibilité ou l'optimisation&nbsp;? Les deux mon capitaine&nbsp;!</p>
  13. <p>Il existe deux méthodes assez classiques en Python pour formater des chaînes de caractère, à partir de <strong>signes plus (+)</strong> ou de <strong>%s</strong>. Considérons les chaînes de caractères suivantes&nbsp;:</p>
  14. <pre>title = "optimisation" * 1000
  15. cat = "python" * 1000
  16. main_title = "biologeek" * 1000</pre>
  17. <p>Si l'on utilise des <strong>signes plus (+)</strong>&nbsp;:</p>
  18. <pre>def foo1():
  19. page = ""
  20. for x in range(500):
  21. page += "&lt;title&gt;" + title + " - " + cat + " - " + main_title + "&lt;/title&gt;"
  22. return page</pre>
  23. <p>Cette fonction s'exécute en <strong>5,91 secondes</strong>, si l'on utilise des <strong>%s</strong>&nbsp;:</p>
  24. <pre>def foo2():
  25. page = ""
  26. for x in range(500):
  27. page += "&lt;title&gt;%s - %s - %s&lt;/title&gt;" % (title, cat, main_title)
  28. return page</pre>
  29. <p>Elle s'exécute dans le même temps. À choisir, beaucoup préfèrent la seconde (notamment en raison du lourd héritage d'autre langages préhistoriques...) mais heureusement il existe en python un moyen de faire encore plus lisible&nbsp;: utiliser des dictionnaires.</p>
  30. <pre>def foo3():
  31. dic = {
  32. "title" : title,
  33. "cat" : cat,
  34. "main_title" : main_title
  35. }
  36. page = ""
  37. for x in range(500):
  38. page += "&lt;title&gt;%(title)s - %(cat)s - %(main_title)s&lt;/title&gt;" % dic
  39. return page</pre>
  40. <p>Le temps d'exécution est ici aussi identique et si vous ne voulez pas créer de dictionnaire supplémentaire, il est possible de mettre directement le dictionnaire en argument&nbsp;:</p>
  41. <pre>page += "&lt;title&gt;%(title)s - %(cat)s - %(main_title)s&lt;/title&gt;" %\
  42. {"title":title, "cat":cat, "main_title":main_title}</pre>
  43. <p>Enfin il existe une dernière méthode utilisant les fonctions intégrées (pour en savoir plus, je vous renvoie sur l'excellent <a href="http://diveintopython.adrahon.org/html_processing/locals_and_globals.html">Dive into Python</a>).</p>
  44. <pre>def foo4():
  45. title = "optimisation" * 1000
  46. cat = "python" * 1000
  47. main_title = "biologeek" * 1000
  48. page = ""
  49. for x in range(500):
  50. page += "&lt;title&gt;%(title)s - %(cat)s - %(main_title)s&lt;/title&gt;" % locals()
  51. return page</pre>
  52. <p>Mais elle met <strong>6,07 secondes</strong> à s'exécuter et ce temps augmente avec le nombre de variables locales donc c'est moins performant... mais tellement pratique :-).</p>
  53. <p>Conclusion, si vous voulez concilier les deux, à savoir optimisation et lisibilité, je vous conseille d'utiliser des dictionnaires pour formater vos chaînes de caractères et si vous n'avez pas nécessairement besoin d'aller vite <strong>locals()</strong> se révèle être très pratique (encore une fois faites des tests !).</p>
  54. <p>Je vous rappelle qu'un billet récapitule l'ensemble des <a href="https://larlet.fr/david/biologeek/archives/20060121-bonnes-pratiques-de-la-programmation-en-python/">bonnes pratiques et optimisations en Python</a>.</p>