Les bonnes pratiques en python (le PEP 8)

Apprendre à programmer en python

python

Le langage Python a été créé par Guido van Rossum (dictateur bienveillant à vie) mais grandit et évolue grâce à sa communauté. Elles sont connues sous le nom de Python Enhancement Proposal (proposition d'amélioration de Python) et portent chacunes un numéro.

La PEP 8 a pour objectif de définir des règles de développement communes entre développeurs.

Guido van Rossum, d'ailleurs, insiste sur le fait qu'un développeur passe plus de temps à lire du code qu'à l'écrire. C'est on ne peut plus juste ! Vous êtes vous-même en train de lire du code à travers ce cours... C'est pourquoi votre code doit avant tout être facile à comprendre. Autrement dit, lisible.

les bonnes pratiques pour coder en python

Encodage

Pour python 3: UTF-8 , oui la base. Est-il encore nécessaire de le préciser? Ne jamais utiliser autre chose que de l'utf-8.

L'indentation

L'indentation de votre code doit être de 4 caractères. Plus c'est trop, moins c'est pas assez.

Pour cela, il faut régler l’éditeur de code, pour faire en sorte que lorsqu’on presse la touche tabulation, cela ajoute 4 espaces et non un caractère tabulation).

Mise en page

Votre code suit une certaine syntaxe et une mise en page.

  • Ajoutez deux lignes vides entre deux éléments de haut niveau, des classes par exemple, pour des questions d'ergonomie.
  • Séparez chaque fonction par une ligne vide.
  • Les noms (variable, fonction, classe, ...) ne doivent pas contenir d'accent. Que des lettres ou des chiffres !

Conventions de nommage

Il s'agit d'un point essentiel. En voici les grandes lignes :

  • classes : lettres majuscules en début de mot. MyGreatClass
  • exceptions : similaire aux classes mais avec un Error à la fin. MyGreatError
  • fonctions : minuscules et tiret du bas : my_function()
  • méthodes : minuscules, tiret du bas et self en premier paramètre : my_method(self)
  • variables : identique aux fonctions.
  • constantes : tout en majuscules avec des tirets si nécessaire. I_WILL_NEVER_CHANGE

Code layout

79 caractères par ligne, pas plus.

Ecrire en python c'est comme écrire une sorte de poème en alexandrin. Il y a le fond mais également la forme.

Import

Les import sont a déclaré au début du script. Ca semble évident, mais c'est toujours bien de le rappeler. Prévoyez une ligne par import .

le chargement d'un module se fait avec l'instruction

import module
plutôt qu'avec
from module import *
.

Les espaces

Les espaces suivent la syntaxe anglosaxone et non française. La PEP 8 recommande d'entourer les opérateurs (+, -, /, *, ==, !=, >=, not, in, and, or...) d'un espace avant et d'un espace après. Par exemple :

# code recommandé :
ma_variable = 3 + 7
mon_texte = "souris"
mon_texte == ma_variable
# code non recommandé :
ma_variable=3+7
mon_texte="souris"
mon_texte== ma_variable

Il n'y a, par contre, pas d'espace à l'intérieur de crochets, d'accolades et de parenthèses :

# code recommandé :
ma_liste[1]
mon_dico{"clé"}
ma_fonction(argument)
# code non recommandé :
ma_liste[ 1 ]
mon_dico{"clé" }
ma_fonction( argument )

Ni juste avant la parenthèse ouvrante d'une fonction ou le crochet ouvrant d'une liste ou d'un dictionnaire :

# code recommandé :
ma_liste[1]
mon_dico{"clé"}
ma_fonction(argument)
# code non recommandé :
ma_liste [1]
mon_dico {"clé"}
ma_fonction (argument)

On met un espace après les caractères : et , (mais pas avant) :

# code recommandé :
ma_liste = [1, 2, 3]
mon_dico = {"clé1": "valeur1", "clé2": "valeur2"}
ma_fonction(argument1, argument2)
# code non recommandé :
ma_liste = [1 , 2 ,3]
mon_dico = {"clé1":"valeur1", "clé2":"valeur2"}
ma_fonction(argument1 ,argument2)

Commentaires

Les commentaires jouent un rôle essentiel dans la compréhension d'un code. Voici quelques bonnes pratiques :

  • Ecrivez des phrases complètes, ponctuées et compréhensibles.
  • Le commentaire doit être cohérent avec le code.
  • Il doit suivre la même indentation que le code qu'il commente.
  • Evitez d'enfoncer des portes ouvertes : ne décrivez pas le code, expliquez plutôt à quoi il sert.
  • Il doit être en anglais.

Guido van Rossum est très clair sur ce point. Il l'explique d'ailleurs ainsi : "Aux développeurs Python de pays non anglophones : écrivez vos commentaires en anglais, s'il vous plaît, sauf si vous êtes sûr à 120% que ce code ne sera jamais lu par des personnes qui ne parlent pas votre langage.

Mais dans un équipe franco-française ou que vous êtes le seul à travailler sur votre projet, il vaut mieux écrire de bons commentaires en français que des mauvais en anglais.

Documentation strings (Docstrings) obligatoires

Une doctring est un ensemble de mots qui documente un bout de code. Elle commence par trois guillemets ouvrants, le commentaire que vous souhaitez apporter puis trois guillements fermants.

Exemple :

def multiplie_nombres(nombre1, nombre2):
    """Multiplication de deux nombres entiers.

    Cette fonction ne sert pas à grand chose.

    Parameters
    ----------
    nombre1 : int
        Le premier nombre entier.
    nombre2 : int
        Le second nombre entier.

        Avec une description plus longue.
        Sur plusieurs lignes.

    Returns
    -------
    int
        Le produit des deux nombres.
    """
    return nombre1 * nombre2

Selon la PEP 8, chaque partie de votre code devrait contenir une Doctring.

  • tous les modules publics
  • toutes les fonctions
  • toutes les classes
  • toutes les méthodes de ces classes