Aller au contenu

Écriture d'un code lisible⚓︎

Afin d'arriver à un code bien structuré, un ensemble de bonnes pratiques a été spécifié, pour Python il s'agît du PEP8 (Python Enhancement Proposal).

Nous allons étudier quelques règles qui y sont spécifiées.

Indentation⚓︎

Il vaut mieux toujours utiliser la même base d'indentation à savoir 4 espaces (pas de tabulations).

🐍 Script Python
# pas recommandé
def fonc(a):
  if a<0:
    return 5*a
  else:
      return 6*a

# recommandé
def fonc(a):
    if a < 0:
        return 5*a
    else:
        return 6*a

Espaces⚓︎

Pour les espaces, il est conseillé d'en placer :

  • une après chaque virgule ;
  • une avant et après les =, les opérateurs de calcul (+, -, *, /) et de comparaison (>, <, >=, <=);
🐍 Script Python
# pas recommandé
a=4*b
c=(1,5)
if a<2:
    ...

# recommandé
a = 4 * b
c = (1, 5)
if a < 2:
    ...

Cependant, on peut retirer une espace dans certains cas, en particulier quand :

  • il y a deux opérations de calcul (on fait alors apparaître les priorités opératoires) ;
  • il y a plusieurs conditions dans un if (pour améliorer la lisibilité du test).
🐍 Script Python
# pas recommandé
y = 4 * x + 1
z = (x + 1) * (5 - y)
if z > 6 and z % 2 == 0:
    print('z est supérieur à 6 et est pair.')

# recommandé
y = 4*x + 1
z = (x+1) * (5-y)
if z>6 and z%2 == 0:
    print('z est supérieur à 6 et est pair.')

Il y a des cas où il faut éviter d'ajouter une espace :

  • avant une virgule, un point-virgule ou un deux-points ;
  • au début et à la fin de l'intérieur d'une liste ou d'un tuple ;
  • avant des parenthèses ou des crochets :
🐍 Script Python
# pas recommandé
a = 1 , 2
if b > 5 :
    print('hello !')
c = [ 4, 5, 6 ]
mafonction (c [1])

# recommandé
a = 1, 2
if b > 5:
    print('hello !')
c = [4, 5, 6]
mafonction(c[1])

Il est aussi conseillé de laisser deux lignes vides entre deux fonctions et une ligne vide avant un return :

🐍 Script Python
# pas recommandé
def fonc1(a):
    b = a + 2
    return b
def fonc2(x):
    y = fonc1(x) * 4
    return y

# recommandé
def fonc1(a):
    b = a + 2

    return b


def fonc2(x):
    y = fonc1(x) * 4

    return y

(la ligne vide avant le return est surtout pertinente quand le code de la fonction est long...)

Longueur des lignes⚓︎

La PEP8 préconise des longueurs de lignes de 79 caractères maximum (cela évite déjà de devoir utiliser l'ascenceur horizontal pour voir les fins de ligne).

Il est possible de couper une ligne avec un \ :

🐍 Script Python
with open('/home/toto/documents/fichier1') as file_1, \
     open('/home/toto/documents/sav/fichier2', 'w') as file_2:
    file_2.write(file_1.read())

Nous pouvons aligner une liste d'arguments d'une fonction sur la parenthèse ouvrante :

🐍 Script Python
def fonction(arg_1, arg_2,
             arg_3, arg_4):
    return arg_1 * arg_4

Voici un exemple de texte trop long (cela s'appliquerait aussi à du code) :

🐍 Script Python
texte_trop_long = """Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, 
dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, 
semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl 
sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. 
Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. 
Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus 
orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. 
Maecenas adipiscing ante non diam sodales hendrerit."""

qu'il vaudra mieux écrire en utilisant des parenthèses et avec une indentation de quatre espaces :

🐍 Script Python
texte_trop_long = (
    "Lorem ipsum dolor sit amet, consectetur adipiscing elit."
    "Sed non risus. Suspendisse lectus tortor,"
    "dignissim sit amet, adipiscing nec, ultricies sed, dolor."
    "Cras elementum ultrices diam. Maecenas ligula massa, varius a,"
    ...
    )

Cependant, le fait que vous ayez des lignes de code trop longues est souvent une indication que votre programme pourrait être mieux écrit (en utilisant plus de fonctions par exemple).