5.3. Les paramètres

Lorsque l’on souhaite qu’une fonction travaille sur des valeurs particulières, il faut lui fournir ces valeurs en entrée. Cela permet à la fonction de traiter des données spécifiques et d’obtenir un résultat qui en dépend. On appelle ces valeurs d’entrée les paramètres (ou arguments) de la fonction.

Note

Les termes paramètre et argument sont souvent utilisés de manière interchangeable, même s’il existe une distinction subtile : l’argument désigne la valeur fournie lors d’un appel de fonction alors que le paramètre correspond à la variable locale de la fonction qui reçoit cette valeur. On parle aussi de paramètre effectif pour désigner la valeur fournie et de paramètre formel pour la variable locale. Par la suite, nous utiliserons de préférence le terme générique de paramètre dans les deux cas.

Les paramètres sont fournis à la fonction entre les deux parenthèses lors de son appel.

print("Je suis un paramètre de print() !")

C’est dans la déclaration d’une fonction, entre les parenthèses, qu’il faut annoncer qu’elle attend des paramètres.

def function_name(arg1, arg2, ...):
    function_body

Les variables arg1 et arg2 sont des paramètres, c’est à dire des variables n’existant qu’à l’intérieur de la fonction et qui prennent comme valeurs initiales celles fournies à la fonction lors de son appel. L’association se fait dans l’ordre, de gauche à droite. Ainsi, arg1 recevra la valeur du premier paramètre reçu, arg2 du deuxième, etc. Les paramètres doivent être séparés par des virgules.

Améliorons à présent notre fonction greet() en ajoutant un paramètre question qui s’affichera après la salutation.

def greet(question):  # `question` est le 1er (et seul) paramètre
    print("Bonjour, " + question)  # on affiche la question reçue


greet("comment allez-vous ?")  # on appel la fonction
greet("avez-vous bien dormi ?")
Bonjour, comment allez-vous ?
Bonjour, avez-vous bien dormi ?

5.3.1. Valeur par défaut des paramètres

Il arrive que l’on souhaite rendre un paramètre facultatif. Par exemple, si l’on désire appeler la fonction greet() sans paramètre pour qu’elle affiche la question la plus usuelle "comment allez-vous ?" dans la console, on serait tenté de ne rien indiquer entre les parenthèses comme lorsque que la fonction n’avait pas de paramètre.

Or cela ne fonctionne pas et Python affiche un message d’erreur. En effet, Python attend un paramètre pour donner une valeur à la variable locale question. La solution est d’assigner à question une valeur par défaut grâce à l’opérateur d’assignation =.

def greet(question="comment allez-vous ?"):
    print("Bonjour, " + question)


greet()
Bonjour, comment allez-vous ?

De cette manière, si aucun paramètre n’est précisé, question prend sa valeur par défaut et la question standard est affichée.

Note

Si la fonction possède plusieurs paramètres, ceux qui ont des valeurs par défaut doivent impérativement se trouver en dernier puisqu’ils sont facultatifs. Cela permet à Python de déterminer à quel paramètre correspond chaque valeur passée à la fonction.

5.3.2. Paramètres nommés

En Python, il est également possible de transmettre une valeur à une fonction en désignant le paramètre correspondant par son nom. Cela permet de ne pas respecter l’ordre de déclaration des paramètres.

def greet(name, question="comment allez-vous ?"):
    print("Bonjour " + name + ", " + question)


greet("Alice")  # un seul paramètre identifié par sa position (2e paramètre par défaut)
greet("Alice", "où vas tu ?")  # deux paramètres identifiés par leur position
greet(question="as-tu une minute ?", name="Alice")  # paramètres identifiés par leur nom
Bonjour Alice, comment allez-vous ?
Bonjour Alice, où vas tu ?
Bonjour Alice, as-tu une minute ?