Un paramètre est le nom donné aux éléments contenus entre les parenthèses dans la définition d'une fonction ou d'une méthode.
Dans le code suivant on a donc trois paramètres : a
, b
, et c
:
def add(a, b, c): return a + b + c resultat = add(1, 2, 3) print(resultat)
Vous pouvez définir des valeurs par défaut pour les paramètres directement dans la définition de la fonction :
def add(a=1, b=2, c=3): return a + b + c resultat = add() print(resultat)
En définissant des valeurs par défaut, vous n'êtes ainsi pas obligés de passer des valeurs à ces paramètres lors de l'appel de la fonction. En cas d'absence d'argument, les valeurs par défaut seront utilisées.
Si cependant vous passez une valeur en argument à un des paramètres, cette valeur sera prioritaire sur la valeur par défaut :
def add(a=1, b=2, c=3): print('a', a) print('b', b) print('c', c) return a + b + c # On utilise les valeurs par défaut de a et c mais on indique une valeur pour le paramètre b resultat = add(b=5) print(resultat)
Vous ne pouvez pas définir des paramètres sans valeur par défaut après un paramètre qui possède une valeur par défaut :
def add(a=0, b=1, c): return a + b + c resultat = add(c=10) print(resultat)
Le code ci-dessus vous retournera une erreur de syntaxe (SyntaxError: non-default argument follows default argument
).
Pour éviter cette erreur, vous avez deux options :
- Placer le paramètre
c
avant les paramètres qui contiennent des valeurs par défaut. - Donner une valeur par défaut au paramètre
c
.
# On donne une valeur par défaut à c def add(a=0, b=1, c=2): return a + b + c # On place c au début de la liste des paramètres def add(c, a=0, b=1): return a + b + c
Les paramètres « positionnels uniquement»
Les paramètres « positionnels uniquement » ne sont disponibles qu'à partir de la version 3.8 de Python avec la PEP 570.
Vous pouvez indiquer qu'un paramètre n'acceptera que des arguments passés de façon 'positionnelle'.
Les paramètres « positionnels uniquement » sont placés avant un /
.
Prenons l'exemple de notre fonction add
:
def add(a, b): return a + b a_before_b = add(a=2, b=3) b_before_a = add(b=3, a=2) print(a_before_b) print(b_before_a)
☝️ Dans le code ci-dessus, nous pouvons passer des valeurs en argument aux paramètres a
et b
en les nommant.
Cela nous permet par exemple d'intervertir la position des arguments lors de l'appel de la fonction.
Si vous souhaitez empêcher cette possibilité, il suffit de rajouter un /
après les deux premiers paramètres.
Le slash n'est pas considéré comme un paramètre, il s'agit d'un caractère spécial qui indique que les paramètres avant le slash doivent être considérés comme « positionnels uniquement ».
def add(a, b, /): return a + b # Si vous spécifiez le nom des paramètres lors de l'appel de la fonction, vous aurez une erreur # TypeError: add() got some positional-only arguments passed as keyword arguments: 'a, b' add(a=2, b=3) # Vous ne pouvez donc appeler la fonction que de cette façon, sans spécifier le nom des paramètres add(2, 3) # Si on déplace le slash, seul le paramètre a sera 'positionnel uniquement' def add(a, /, b): return a + b add(2, b=10) # Valide add(2, 3) # Valide add(a=2, b=3) # Erreur