Skip to article frontmatterSkip to article content

dans cette partie on voit des conventions de codage; on peut ne pas les suivre, et le code fonctionne tout de même ! mais il est fortement recommandé de les appliquer - sinon c’est un peu comme si on parlait avec un fort accent :)
en particulier tout le code de la librairie standard obéit à ces règles de présentation (sauf certains modules très anciens)

PEP-008

ces règles de présentation sont explicitées dans la note dite PEP-008
les points les plus importants qu’on vous demande de retenir et d’appliquer :

OUINON
fonction(a, b, c)fonction (a,b,c)
GLOBALE = 1000globale=1000
variable, ma_variableVariable, maVariable
module, functionModule, Function
Classe, UneClasseclasse, ma_classe, maClasse
lignes de longueur <= 80 caractèreslignes très longues
docstrings pour documenter à minima

on va voir tout ça un peu plus en détail

les espaces

OUINON
a = 10a=10
L = [1, 2, 3, 4]L = [1,2,3,4]
D = ['k1': 'v1', 'k2': 'v2'}D = ['k1':'v1', 'k2' : 'v2'}

les espaces (2/3)

OUINON
def foo(a, b, c):def foo (a, b, c):
def foo(a,b,c):
res = foo(a, b, c)res = foo (a, b, c)

les espaces (3/3)

OUINON
d = {1: 'un', 2: 'deux'}d = {1:'un',2:'deux'}
d = { 1 : 'un', 2 : 'deux' }
s = {'a', 'b', 'c', 'd'}s = {'a','b','c','d'}
s = { 'a' , 'b' , 'c' , 'd' }

les noms de variables

type d’objetcatégorie
variable usuelle1
fonction1
module1
classe2
catégorieOUINON
1minusculeMAJUSCULE
1deux_motsDeuxMots
2Mixteminuscule (sauf types prédéfinis)
2DeuxMotsMAJUSCULE

largeur de la page

longueur des lignes

plusieurs astuces pour respecter une largeur fixe :

# 1. utiliser les parenthèses

def foo():
    if expression(args):
        return (le_resultat() and de_l_expression() 
                and est_susceptible() and de_prendre()
                and beaucoup_de_place())

longueur des lignes et parenthèses

# 2. ça marche aussi avec les {} et [] 

GLOBAL_MAP = [
    {'shortcut': 'ctrl-w', 'function': 'RISE:render-all-cells'},
    {'shortcut': 'ctrl-q', 'function': 'RISE:edit-all-cells'},
]

longueur des lignes et chaines littérales

# 3. lorsqu'on a besoin de retourner des chaines de caractères très longues
# on peut utiliser une conjonction de
# * parenthèses
# * concaténation des chaines dans le source

def longue_chaine(nom, prenom):
    return (
        f"<table><thead><tr><th>Nom</th><th>Prénom</th></tr></thead>"
        f"<tbody><tr><td>{nom}</td><td>{prenom}</td></tr></tbody>"
        f"</table>"
    )

le docstring

lorsqu’on écrit une fonction (ou une classe, ou un module) on la documente comme ceci

def gcd(a, b):
    """
    returns the greatest common divisor
    of both inputs
    """
    while b:
        a, b = b, a % b
    return a
help(gcd)
Help on function gcd in module __main__:

gcd(a, b)
    returns the greatest common divisor
    of both inputs

type hints

de manière optionnelle, on peut indiquer les types des arguments et le type de retour

def gcd2(a: int, b: int) -> int:
    """
    returns the greatest common divisor
    of both inputs
    """
    while b:
        a, b = b, a % b
    return a
help(gcd2)
Help on function gcd2 in module __main__:

gcd2(a: int, b: int) -> int
    returns the greatest common divisor
    of both inputs

de nombreux outils

command line

pour vérifier / réparer, regardez du coté de

vs-code

et pour naviguer entre les erreurs, via la palette (ctrl-shift p ou cmd-shift-p)