background preloader

Bonnes pratiques

Facebook Twitter

A "Best of the Best Practices" (BOBP) guide to developing in Python. The Best of the Best Practices (BOBP) Guide for Python A "Best of the Best Practices" (BOBP) guide to developing in Python. In General Values "Build tools for others that you want to be built for you. " - Kenneth Reitz"Simplicity is alway better than functionality. " - Pieter Hintjens"Fit the 90% use-case.

Ignore the nay sayers. " - Kenneth Reitz"Beautiful is better than ugly. " - PEP 20Build for open source (even for closed source projects). General Development Guidelines "Explicit is better than implicit" - PEP 20"Readability counts. " - PEP 20"Anybody can fix anything. " - Khan Academy Development DocsFix each broken window (bad design, wrong decision, or poor code) as soon as it is discovered. " In Particular Style Follow PEP 8, when sensible. Naming General Naming Guidelines Avoid one-letter variables (esp. l, O, I). Exception: In very short blocks, when the meaning is clearly visible from the immediate context Fine for e in elements: e.mutate() Avoid redundant labeling.

Yes No Prefer "reverse notation". No. Gestion des erreurs en Python. Plus on code, plus on oublie ce que c’était quand on a débuté. Même moi, et pourtant je fais un gros effort pour essayer de me replonger dans cet état d’esprit. Dernièrement j’ai eu plusieurs interactions qui m’ont mis un petit taquet derrière la tête : - “Mec, les exceptions, y a plein de personnes qui pigent pas.”– “Nannnn, mais quand même, les exceptions…”– “Si, les exceptions.”– “Nan, vraiment ?” – “Oui, vraiment.” Donc, back to black, et petit tour de la gestion d’erreur en Python. Et de la musique. La notion d’exception Une exception est un mécanisme d’interruption du programme utilisé pour signaler que quelque chose d’anormal est en train de se produire. On les rencontre dans de nombreux cas, mais souvent, c’est dans le cadre d’erreurs. De base, il y a un paquet d’exceptions en Python, et celles fournies par défaut sont listées ici.

Malgré l’abondance de ces exceptions, vous pouvez remarquer un motif récurrent quand Python crash et affiche l’erreur : Gros pâté de texte. Par exemple : with. Un gros guide bien gras sur les tests unitaires en Python, partie 4 | Sam & Max. Python est un langage très pro, et il y a beaucoup, beaucoup d’outils pour faire des tests. Après avoir vu pytest, un outil typiquement pythonique sont les doctests, des tests unitaires intégrés dans les docstrings. Pour rappel, les docstrings, ce sont ces chaînes de caractères qu’on retrouve au début des modules, sous la signatures des fonctions ou dans la définition des classes.

Elles servent à la documentation de ceux-ci, ainsi on peut la lire dans le code, et dans les vraies docs car les outils standards savent les extraire. Ça ressemble à ça : Et bien ces docstrings, on peut mettre des tests unitaires dedans formatés comme des sessions de shell Python. Cela permet de donner des exemples d’usage, tout en testant son code. C’est chouette. Musique ? Musique. Hello doctests Faire des doctests n’est pas bien compliqué car c’est du copier coller. On lance ensuite directement notre fichier de code : Et ça n’affiche absolument rien. Ceci passe : Mais ceci échoue : Formater ses doctests. Bien nommer ses variables en Python | Sam & Max. There are only two hard things in Computer Science: cache invalidation and naming things.

Phil Karlton Utiliser des bons noms est le geste de documentation le plus important d’un code. Je ne parle pas de bien formater le nom des variables. Pour ça, il y a le PEP8 et ce qu’il recommande tient en 3 lignes : Le nom des classes en CamelCaseLes (pseudo) constantes en UPPER_CASELe reste en snake_case C’est tout. Non, je parle de choisir un nom adapté et descriptif. Le post est long, et vous savez que quand le post est long, je vous mets une musique d’attente. Explicit is better than implicit En Python, il n’y a pas de déclaration de type.

Prenez cet exemple : Quand on lit ce bout de code, on se demande : Best ? Maintenant, avec des noms explicites : On comprend tout de suite de quoi il est question. Et si on passe à une écriture plus compacte, le gain est encore plus net : Parfois, on veut la concision, mais faute de nommage, on doit se retourner vers les commentaires : Conventions Savoir quand nommer ou. Conventions de nom en Python. Vous voulez savoir quels sont les conventions pour nommer des fonctions, des variables, des classes en Python? Je vous propose la lecture de: Style Guide for Python Code qui reprend les naming conventions à utiliser. Une ressource vraiment importante et fiable issue des PEPs (Python Enhancement Proposal). Nom des packages (paquets) et des modules Les nom des modules doivent être court et uniquement en minuscule. Vous pouvez utiliser des soulignés (underscores) dans les noms des modules si cela améliore la lisibilité. Etant donné que le nom du module correspond à un fichier sur le système d'exploitation -- et que certain système d'exploitation sont sensible à la case (ou tronque les noms) -- il est important de choisir un nom de module aussi court que possible.

Nom des classes Les noms de classes devrait utiliser la convention de noms des mots capitalisés (VoiciUnExempleDeNomDeClasseEnCapitalizedWord). Toujours utiliser cls pour le premier argument d'une méthode de classe. Transforming Code into Beautiful, Idiomatic Python. Anti-Patterns in Python Programming - Constantine Lignos. This page is a collection of the most unfortunate but occasionally subtle issues I've seen in code written by students new to writing Python. It's written to help students get past the phase of writing ugly Python code and understand some of the most common idioms. The simplifications employed (for example, ignoring generators and the power of itertools when talking about iteration) reflect its intended audience. There are always reasons to use some of these anti-patterns, which I've tried to give those where possible, but in general using these anti-patterns makes for less readable, more buggy, and less Pythonic code.

If you're looking for broader introductory materials for Python, I highly recommend The Python Tutorial or Dive into Python. If you have comments or wish to use this work in way other than what the license allows, feel free to get in touch with me by e-mail. The use of range for i in range(len(alist)): print alist[i] for item in alist: print item Why do this? Loops. Quelques astuces pour accélérer un programme. Optimisation du code L'exemple suivant trie des éléments. Mais comme ceux-ci sont soit des chiffres sous formes de lettres, soit des entiers, il faut d'abord tous les convertir en entiers. Il est plus simple de définir que ces nombres seront des entiers une bonne fois pour toutes et ne jamais faire de conversions. Il faut toujours avoir des listes d'objets de même type.

De plus, dans cette fonction, la fonction gagnant est appelée deux fois avec les mêmes paramètres. Optimisation algorithmique Les deux fonctions suivantes calcule la fréquence des lettres dans un texte : Quelle est la plus rapide ? Etrange ? Comme l'alphabet a pour taille 262, la seconde version est plus efficace. Profiler Le programme est évidemment plus lent mais il enregistre les temps d'exécution de chaque fonction : On s'intéresse d'abord aux fonctions qui sont appelées un grand nombre de fois et dont le temps cumulé est important. Par Pour obtenir le résultat suivant : On voit mieux qui appelle qui et combien de fois. 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 plus alléchants, m'a bien motivé pour effectuer la traduction de l'une des meilleures présentation par David Goodger que je connaisse qui remet les bonnes pratiques Python à plat, ce qui est toujours bon avant d'aller plus loin.

La lisibilité est importante Les programmes doivent être écrits pour être lus par des gens et accidentellement exécutés par les machines.-- Abelson & Sussman, Structure and Interpretation of Computer Programs Essayez de rendre vos programmes faciles à lire et évidents. PEP 8 : Style Guide pour le code Python Une lecture immanquable : (PEP = Python Enhancement Proposal) La communauté Python a ses propres standards sur ce à quoi doit ressembler le code, codifiés dans le PEP8. Whitespace 1 Whitespace 2 Nommage #! 30 Python Language Features and Tricks You May Not Know About. 1 Introduction Since I started learning Python, I decided to maintain an often visited list of "tricks".

Any time I saw a piece of code (in an example, on Stack Overflow, in open source software, etc.) that made me think "Cool! I didn't know you could do that! " I experimented with it until I understood it and then added it to the list. This post is part of that list, after some cleaning up. If you are an experienced Python programmer, chances are you already know most of these, though you might still find a few that you didn't know about. Each trick or language feature is demonstrated only through examples, with no explanation. The list is very roughly ordered by difficulty, with the easier and more commonly known language features and tricks appearing first. A table of contents is given at the end. Update - April 9th, 2014 As you can see the article has been growing with currently 38 items in it, mostly thanks to comments from readers.

Update - March 14th, 2014 Update - March 8th, 2014. 5 choses à apprendre en priorité en Python. Quand on apprend un nouveau langage de programmation, on apprend d’abord les bases. Et pour la plupart des langages, elles sont communes : déclarer une variable, faire des conditions et des boucles, faire des fonctions, importer un code d’un autre fichier, etc. Ce qui va différencier le moment où vous savez programmer dans CE langage, ce sont des notions qui lui sont spécifiques et que vous commencez à maitriser. Voici 5 notions spécifiques au langage qu’il faut apprendre en priorité si vous voulez pouvoir dire “je code en Python” : Pip Pip est la moyen le plus utilisé d’installer une bibliothèque externe dans l’environnement Python.

Lire l’article sur pip. Virtualenv Virtualenv permet d’isoler plusieurs installations de Python. Un outil qui a été ajouté dans la lib standard en Python 3.3. Lire l’article sur virtualenv. Les listes en intention J’ai envie de dire l’itération en générale, mais c’est un très vaste sujet, et il est couvert en grande partie par les 3 derniers points. L’unpacking.