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 :
c
avant les paramètres qui contiennent des valeurs par défaut.c
.
#norun
# 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
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.
#norun
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