Bonnes pratiques de codage⚓︎
Définitions⚓︎
PEP⚓︎
PEP signifie Python Enhancement Proposal, et il y en a plusieurs. Un PEP est un document qui décrit les nouvelles fonctionnalités proposées pour Python et documente les aspects de Python, comme la conception et le style, pour la communauté.
Tiret bas⚓︎
Connu en anglais comme underscore, on trouve ce caractère avec la touche du clavier 8_\
Il ne faut pas dire « tiret du 8 » ; cela n'est valable que sur certains claviers...
snake_case⚓︎
Le snake case est une convention typographique en informatique consistant à écrire des ensembles de mots, généralement, en minuscules en les séparant par des tirets bas.
Exemple :
un_joli_nom_de_variable
camel case⚓︎
Le camel case consiste à mettre en majuscule les premières lettres de chaque mot, sans séparer par un tiret bas.
Exemple :
UnNomDeClasse
PEP 8⚓︎
PEP 8, parfois orthographié PEP8 ou PEP-8, est un document qui fournit des directives et des meilleures pratiques sur la façon d’écrire du code Python. Il a été écrit en 2001 par Guido van Rossum (le créateur de Python), Barry Varsovie et Nick Coghlan. L’objectif principal de PEP 8 est d’améliorer la lisibilité et la cohérence du code Python.
Les identifiants⚓︎
-
On utilisera le snake_case pour toutes les variables, sauf :
- pour les
class
que l'on nomme en camel case, - pour les constantes, en majuscule.
- pour les
-
On donne des identifiants qui ont un sens.
# mal
p = (5, 8)
x, y = p
# mieux
point_P = (5, 8)
point_P_x, point_P_y = point_P
Aération du code⚓︎
- L'indentation doit être de 4 espaces.
- Une ligne vide après une définition de fonction.
- Deux lignes vides après une définition de classe.
- Une ligne vide pour séparer deux étapes marquées d'un groupe d'instructions.
- Une ligne vide pour aérer chaque doctest.
- Maximum 79 caractères de code par ligne.
- Une ligne trop longue peut être coupée sans problème à l'intérieur de parenthèses, crochets ou accolades ; on parle de continuation implicite.
- Sinon, on peut toujours couper une ligne avec
\
. - La continuation implicite est à privilégier dès que possible !
# continuation implicite
def ma_fonction(argument_1,
argument_2, argument_3, argument_4):
pass
# ligne coupée avec \
ma_fonction(22, 23, 24, 25) + \
ma_fonction(34, 35, 36, 37)
Aération des opérateurs⚓︎
On met de l'espace autour des opérateurs binaires, sauf
- pour les paramètres par défaut des fonctions,
- pour les opérations prioritaires
- pour
:
dans les définitions de tranches
# Mal
x = a*b+c
if x > 5 and x % 2 == 0:
print('x est plus grand que 5 et divisible par 2.')
# moyen
x = a * b + c
if x>5 and x%2==0:
print('x est plus grand que 5 et divisible par 2.')
# bien
x = a*b + c
if (x > 5) and (x % 2 == 0):
print('x est plus grand que 5 et divisible par 2.')
On met une espace :
- juste après une virgule
mon_tuple = (4, 11, 25)
On ne met pas d'espace
- juste après une parenthèse ouvrante (ou crochet, ou accolade)
- juste avant une parenthèse fermante (idem).
On ne place jamais d'espace en fin de ligne.
Un peu plus encore⚓︎
Inspiré de ce document, vous retrouverez plus de détails. Une recommandation y est faite, elle fait débat. Les deux exemples suivant utilisent de la conversion implicite ; nous ne le recommandons pas ! Nous montrons ensuite la bonne pratique.
# Non recommandée
ma_liste = []
if not len(my_list):
print('ma_liste est vide !')
En Python, toute liste, chaîne ou tuple vide est convertie implicitement à False
.
Il est donc possible de proposer une alternative plus simple à ce qui précède :
# Non recommandée non plus, mais vue souvent !
ma_liste = []
if not ma_liste:
print('ma_liste est vide !')
Alors que les deux exemples afficheront que la liste est vide, la deuxième option est plus simple, donc PEP 8 l’encourage.
⚠️ Contrairement au PEP 8, nous préférons interdire la conversion implicite, donc une autre méthode est recommandée.
# La bonne méthode
ma_liste = []
if ma_liste == []:
print("ma_liste est vide !")
# ou alors
if ma_liste != []:
print("ma_liste n'est pas vide !")