Académique Documents
Professionnel Documents
Culture Documents
1) Introduction
En programmation, les fonctions sont très utiles pour réaliser plusieurs fois la même opération au
sein d'un programme. Elles rendent également le code plus lisible et plus clair en le fractionnant
en blocs logiques.
Nous avons déjà rencontré diverses fonctions prédéfinies : print(), input(), range().
Une fonction est un bloc de code qui ne s'exécute que lorsqu'elle est appelée. Elle peut être
considérée comme une sorte de « boîte noire » :
À laquelle vous passez aucune, une ou plusieurs paramètre(s) entre parenthèses.
Qui effectue une action.
Et qui renvoie un objet Python ou rien du tout.
Par exemple, si vous appelez la fonctions print , len et max de la manière suivante :
>>> liste = [0, 10, 12]
>>> print(liste) # affiche le contenu de liste
[0, 10, 12]
>>> len(liste) # renvoie la longueur de liste
3
>>> max(liste) # renvoie le plus grand élément de liste
12
bloc d'instructions
La syntaxe de def utilise les : (deux-points) comme les tests if et les boucles for et while.
L'indentation du bloc d'instructions (appelé corps de la fonction) est obligatoire.
Les paramètres doivent être séparés par des virgules (param1, param2, …. , paramN).
Notez qu'une fonction ne prend pas forcément un argument et ne renvoie pas forcément une
valeur, par exemple :
Exemple 1 : Fonction sans aucun argument
#Définition de la fonction hello
def hello():
print("Bonjour")
# Programme principal
a = 5
c = carre (a) # Appel de la fonction carre
print("Le carré de", a , " est :" , c )
Affichage après exécution :
Le carré de 5 est : 25
3) Passage d'arguments
Le nombre d'arguments que l'on peut passer à une fonction est variable. Nous avons vu ci-dessus
des fonctions auxquelles on passait 0 ou 1 argument.
Pour définir une fonction avec plusieurs paramètres, il suffit d’inclure ceux-ci entre les
parenthèses qui suivent le nom de la fonction, en les séparant à l’aide de virgules.
Lors de l’appel de la fonction, les arguments utilisés doivent être fournis dans le même ordre que
celui des paramètres correspondants (en les séparant eux aussi à l’aide de virgules). Le premier
argument sera affecté au premier paramètre, le second argument sera affecté au second
paramètre, et ainsi de suite.
Exemple : Fonction compteur à 3 paramètres¶
La fonction suivante utilise trois paramètres :
start qui contient la valeur de départ,
stop la borne supérieure (non inclue).
step le pas du compteur.
# Définition de la fonction compteur Affichage après exécution :
def compteur (start, stop, step):
1
i = start
3
while i < stop:
5
print(i)
7
i = i + step
9
print(somme (2,5))
print(somme (2))
Affichage après exécution :
7
Traceback (most recent call last):
File "<somme.py>", line 4, in <module>
TypeError: somme() missing 1 required positional argument: 'y'
On constate que passer un seul argument à une fonction qui en attend deux, conduit à une erreur.
a) Les arguments positionnels
Lorsqu'on définit une fonction def fct(x, y): les arguments x et y sont appelés arguments
positionnels (en anglais positional arguments). Il est strictement obligatoire de les préciser lors
de l'appel de la fonction.
De plus, il est nécessaire de respecter le même ordre lors de l'appel que dans la définition de la
fonction. Dans l'exemple ci-dessus, 2 correspondra à x et 3 correspondra à y. Finalement, tout
dépendra de leur position, d'où leur qualification de positionnel.
b) Les arguments par mot-clé
Il est aussi possible de passer un ou plusieurs argument(s) de manière facultative et de leur
attribuer une valeur par défaut :
def fct(x = 1): print(x1, x2)
return x
x1 = fct()
x2 = fct(10)
On peut toujours passer les arguments par mot-clé dans un ordre arbitraire à partir du moment où
on précise leur nom.
Par contre, si les deux arguments positionnels a et b ne sont pas passés à la fonction, Python
renvoie une erreur.
>>> fct(z=0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: fct() missing 2 required positional arguments: 'a' and 'b'
Conseil: Préciser le nom des arguments par mot-clé lors de l'appel d'une fonction est une pratique
que nous vous recommandons. Cela les distingue clairement des arguments positionnels.
a = 2
b = 7
print(a, b)
a = 2
b = 7
print(a, b)
test()
print(a, b)