CISD Chapitre 2
CISD Chapitre 2
CISD Chapitre 2
LES FONCTIONS
➢ Vous pouvez choisir n’importe quel nom pour la fonction que vous créez, à l’exception
des mots réservés du langage, et à la condition de n’utiliser aucun caractère spécial ou
accentué (le caractère souligné « _ » est permis). Comme c’est le cas pour les noms de
variables, il vous est conseillé d’utiliser surtout des lettres minuscules, notamment au
début du nom (les noms commençant par une majuscule seront réservés aux classes
que nous étudierons plus loin).
➢ Comme les instructions if et while que vous connaissez déjà, l’instruction def est une
instruction composée. La ligne contenant cette instruction se termine obligatoirement
par un deux-points, lequel introduit un bloc d’instructions que vous ne devez pas
oublier d’indenter.
➢ La liste de paramètres spécifie quelles informations il faudra fournir en guise
d’arguments lorsque l’on voudra utiliser cette fonction (les parenthèses peuvent
parfaitement rester vides si la fonction ne nécessite pas d’arguments).
➢ Une fonction s’utilise pratiquement comme une instruction quelconque. Dans le corps
d’un programme, un appel de fonction est constitué du nom de la fonction suivi de
parenthèses. Si c’est nécessaire, on place dans ces parenthèses le ou les arguments que
l’on souhaite transmettre à la fonction. Il faudra en principe fournir un argument pour
chacun des paramètres spécifiés dans la définition de la fonction, encore qu’il soit
possible de définir pour ces paramètres des valeurs par défaut (voir plus loin).
1
Conception et Implémentation de Structures de Données
IAI-Togo, Licence 1, Semestre 2
Année académique 2020-2021
Chaque fois que la fonction tableMulti() est appelée, Python réserve pour elle (dans la
mémoire de l’ordinateur) un nouvel espace de noms. Les contenus des variables base,
debut, fin et n sont stockés dans cet espace de noms qui est inaccessible depuis l’extérieur
de la fonction. Ainsi par exemple, si nous essayons d’afficher le contenu de la variable base
juste après avoir effectué l’exercice ci-dessus, nous obtenons un message d’erreur :
2
Conception et Implémentation de Structures de Données
IAI-Togo, Licence 1, Semestre 2
Année académique 2020-2021
La machine nous signale clairement que le symbole base lui est inconnu, alors qu’il était
correctement imprimé par la fonction tableMulti() elle-même. L’espace de noms qui
contient le symbole base est strictement réservé au fonctionnement interne de
tableMulti(), et il est automatiquement détruit dès que la fonction a terminé son travail.
Les variables définies à l’extérieur d’une fonction sont des variables globales. Leur contenu
est « visible » de l’intérieur d’une fonction, mais la fonction ne peut pas le modifier.
Exemple :
Nous commençons par définir une fonction très simple (qui n’utilise d’ailleurs aucun
paramètre). À l’intérieur de cette fonction, une variable p est définie, avec 20 comme
valeur initiale. Cette variable p qui est définie à l’intérieur d’une fonction sera donc une
variable locale.
Une fois la définition de la fonction terminée, nous revenons au niveau principal pour y
définir les deux variables p et q auxquelles nous attribuons les contenus 15 et 38. Ces
deux variables définies au niveau principal seront donc des variables globales.
Ainsi le même nom de variable p a été utilisé ici à deux reprises, pour définir deux
variables différentes : l’une est globale et l’autre est locale. On peut constater dans la suite
de l’exercice que ces deux variables sont bel et bien des variables distinctes,
indépendantes, obéissant à une règle de priorité qui veut qu’à l’intérieur d’une fonction
(où elles pourraient entrer en compétition), ce sont les variables définies localement qui
ont la priorité.
On constate en effet que lorsque la fonction mask() est lancée, la variable globale q y est
accessible, puisqu’elle est imprimée correctement. Pour p, par contre, c’est la valeur
attribuée localement qui est affichée.
Tout ceci peut vous paraître compliqué au premier abord. Vous comprendrez cependant
très vite combien il est utile que des variables soient ainsi définies comme étant locales,
c’est-à-dire en quelque sorte confinées à l’intérieur d’une fonction. Cela signifie en effet
3
Conception et Implémentation de Structures de Données
IAI-Togo, Licence 1, Semestre 2
Année académique 2020-2021
que vous pourrez toujours utiliser une infinité de fonctions sans vous préoccuper le moins
du monde des noms de variables qui y sont utilisées : ces variables ne pourront en effet
jamais interférer avec celles que vous aurez vous-même définies par ailleurs.
Cet état de choses peut toutefois être modifié si vous le souhaitez. Il peut se faire par
exemple que vous ayez à définir une fonction qui soit capable de modifier une variable
globale. Pour atteindre ce résultat, il vous suffira d’utiliser l’instruction global. Cette
instruction permet d’indiquer – à l’intérieur de la définition d’une fonction – quelles sont
les variables à traiter globalement.
MODULES DE FONCTIONS
Afin de pouvoir mieux comprendre la distinction entre la définition d’une fonction et son
utilisation au sein d’un programme, nous vous suggérons de placer fréquemment vos
définitions de fonctions dans un module Python, et le programme qui les utilise dans un
autre.
Exemple :
Écrivez les lignes de code suivantes, et sauvegardez-les dans un fichier auquel vous
donnerez le nom dessins_tortue.py :
4
Conception et Implémentation de Structures de Données
IAI-Togo, Licence 1, Semestre 2
Année académique 2020-2021
Exemples :
Lorsque l’on appelle cette fonction en ne lui fournissant que le premier argument, le second
reçoit tout de même une valeur par défaut. Si l’on fournit les deux arguments, la valeur
par défaut pour le deuxième est tout simplement ignorée. Vous pouvez définir une valeur
par défaut pour tous les paramètres, ou une partie d’entre eux seulement. Dans ce cas,
cependant, les paramètres sans valeur par défaut doivent précéder les autres dans la liste.
Par exemple, la définition ci-dessous est incorrecte :
Exemple :