Académique Documents
Professionnel Documents
Culture Documents
Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Syntaxe :
Déclaration :
Procédure nom-procédure
<déclaration de variables>
Début
< Instructions>
Fin
nom-procédure
Syntaxe :
Déclaration :
<déclaration de variables>
Début
<Instructions>
Fin
Exemple : Ecrire une procédure Permut qui permet de permuter 2 entiers, écrire ensuite l’algorithme
principal.
1
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Paramètre formel :
La déclaration de l’entête d’une procédure peut comporter après le nom de la procédure des
paramètres appelés des paramètres formels.
Paramètre effectif :
Dans le cas où la déclaration comprend des paramètres formels, chaque appel de la procédure doit
comporter des paramètres effectifs compatibles et ayant le même nombre que les paramètres
formels.
Remarque :
Le passage des paramètres par valeurs est utilisé pour transmettre une valeur à la procédure.
Le passage des paramètres par variables est utilisé pour que la procédure puisse modifier la
valeur d’une variable du programme appelant.
Exemple : Ecrire une procédure qui prend 3 entiers en paramètres dont le 3 ème entier contiendra la
somme des 2 premiers.
2. Les fonctions :
Une fonction est un sous-programme qui renvoie une valeur d’un seul type. Ce type sera celui de la
fonction. La valeur retournée par la fonction dépend en générale des paramètres formels et des
variables globales.
Remarque :
Les variables globales sont des variables qui sont déclarées à l’extérieur du sous-programme.
Les variables locales sont déclarées à l’intérieur du sous-programme.
Syntaxe :
Déclaration :
<déclaration de variables>
Début
<Instructions>
nom-fonction valeur
Fin
2
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Exercice : Ecrire une fonction max qui prend en paramètres 2 entiers et retourne le max des deux,
écrire ensuite un algorithme qui permet de saisir 4 entiers et utiliser la fonction max afin de
déterminer et d’afficher le maximum des 4 entiers.
Autre exemple, si vous appelez la méthode liste.append(5) (n’oubliez pas, une méthode est une
fonction qui agit sur l’objet auquel elle est attachée), append() ajoute l’entier 5 à la variable liste mais
ne renvoie rien.
Au contraire, aux yeux du programmeur une fonction est une portion de code effectuant une suite
d’instructions bien particulière.
Une fonction effectue une tâche. Pour cela, elle reçoit éventuellement des arguments et
renvoie éventuellement un résultat. L’algorithme utilisé au sein de la fonction n’intéresse pas
directement l’utilisateur. Par exemple, il est inutile de savoir comment la fonction math.cos()
calcule un cosinus, on a juste besoin de savoir qu’il faut lui passer en argument un angle en
radian et qu’elle renvoie le cosinus de cet angle.
3
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Chaque fonction effectue en général une tâche unique et précise. Si cela se complique, il est
plus judicieux d’écrire plusieurs fonctions (qui peuvent éventuellement s’appeler les unes les
autres). Cette modularité améliore la qualité générale et la lisibilité du code. Vous verrez
qu’en Python, les fonctions présentent une grande flexibilité.
2. Pourquoi créer des fonctions ?
1- Meilleure organisation du programme (regrouper les tâches par blocs : lisibilité maintenance)
2- On peut regrouper dans un module les fonctions traitant des problèmes de même nature ou
manipulant le même type d’objet
3- Pour charger les fonctions d’un module dans un autre module / programme principal, on utilise la
commande import nom_du_module
4- Les fonctions importées sont chargées en mémoire. En cas de collision de noms, les plus récentes
écrasent les anciennes.
• Renvoie une valeur en sortie (ou plusieurs valeurs, ou pas de valeurs du tout : procédure)
• Pour définir une fonction, Python utilise le mot-clé def et si on veut que celle-ci renvoie une valeur,
il faut utiliser le mot-clé return.
Syntaxe :
<bloc d'instructions>
Retour de résultat :
4
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Exemple de fonction :
def f(x, n) :
xcarre = x*x
return 3*xcarre + 4*x/n + 5*n
Pour calculer le résultat d'une fonction pour certaines valeurs, le programme appelant doit appeler la
fonction en lui transmettant ces valeurs.
La liste des paramètres réels est constituée d'une liste d'expressions séparées par des virgules. Il est
important de respecter l'ordre des paramètres formels. La valeur de chaque expression est calculée
et devient ainsi la valeur du paramètre formel correspondant.
Exemple d’appel :
a = f(b, 4)
a = f(14.5, n) + 4*f(b, m + 12)
print( 'La valeur est : ', f(55.12, 42)
5. Passage d’arguments:
Le nombre d’argument(s) que l’on peut passer à une fonction est variable. Dans les chapitres
précédents, vous avez vu des fonctions internes à Python qui prenaient au moins 2 arguments,
pour rappel souvenez-vous de range(1,10) ou encore range(1,10,2). Le nombre d’argument est
donc laissé libre à l’initiative du programmeur qui est en train de développer une nouvelle
fonction.
Une particularité des fonctions en Python est que vous n’êtes pas obligé de préciser le type des
arguments que vous lui passez, dès lors que les opérations que vous effectuez avec ces
arguments sont valides. Python est en effet connu comme étant un langage au typage
dynamique, c’est-à-dire qu’il reconnaît pour vous le type des variables au moment de
l’exécution, par exemple :
5
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Un énorme avantage en Python est que les fonctions sont capables de renvoyer plusieurs valeurs
à la fois, comme dans cette fraction de code :
return x**2,x**3
.....
>>> carre_cube(2)
(4, 8)
En réalité Python ne renvoie qu’un seul objet, mais celui-ci peut être séquentiel, c’est à dire contenir
lui même plusieurs objets. Dans notre exemple Python renvoie un objet de type tuple.
return [x**2,x**3]
.....
>>> carre_cube2(3)
[9, 27]
Renvoyer un tuple ou une liste de deux arguments (ou plus) est notamment très pratique en
conjonction avec l’affectation multiple, par exemple :
Cela permet de récupérer plusieurs valeurs retournées par une fonction et les affecter à des variables
différentes à la volée.
6
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Notez que si on passe plusieurs arguments à une fonction, le ou les arguments facultatifs doivent
être situés après les arguments obligatoires. Il faut donc écrire def fct(x, y, z=1) :.
Exemple :
• Noter le rôle du :
• Attention à l’indentation
Dans ce cas la fonction hello() se contente d’imprimer la chaîne de caractères "Bonjour" à l’écran.
Elle ne prend aucun argument et ne renvoie aucun résultat. Par conséquent, cela n’a pas de sens de
vouloir récupérer dans une variable le résultat renvoyé par une telle fonction. Si on essaie tout de
même, Python affecte la valeur None.
>>> x = hello()
bonjour
>>> print(x)
None
7
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
print(petit(10, 12))
print(petit(a=10,b=12))
print(petit(b=12,a=10))
print(petit(12,10))
La fonction renvoie 0
Définition de la fonction
Programme principal
8
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
2 exécutions du programme :
7. Exemples :
7.1. Un ou plusieurs paramètres, pas de retour :
Exemple sans l’instruction return, ce qu’on appelle souvent une procédure (Une fonction vaut
quelque chose, une procédure fait quelque chose). Dans ce cas la fonction renvoie implicitement la
valeur None :
def table(base, debut, fin):
"""Affiche la table de multiplication des <base> de <debut> à <fin>."""
n = debut
while n <= fin:
print(n, 'x', base, '=', n * base)
n += 1
# exemple d'appel :
table(7, 2, 8)
# 2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56
import math
def surfaceVolumeSphere(r):
surf = 4.0 * math.pi * r**2
vol = surf * r/3
return surf, vol
# programme principal
rayon = float(input('Rayon : '))
s, v = surfaceVolumeSphere(rayon)
print("Sphère de surface {:g} et de volume {:g}".format(s, v))
Puisque en Python une variable peut référencer une fonction, on peut transmettre une fonction
comme paramètre :
Il est possible de spécifier, lors de la déclaration, des valeurs par défaut à utiliser pour les arguments.
Cela permet, lors de l’appel, de ne pas avoir à spécifier les paramètres correspondants. Il est possible,
en combinant les valeurs par défaut et le nommage des paramètres, de n’indiquer à l’appel que les
paramètres dont on désire modifier la valeur de l’argument. Il est par contre nécessaire de regrouper
tous les paramètres optionnels à la fin de la liste des paramètres.
10
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Attention
On utilise de préférence des valeurs par défaut non modifiables (int, float, str, bool, tuple) car la
modification d’un paramètre par un premier appel est visible les fois suivantes. Si on a besoin d’une
valeur par défaut qui soit modifiable (list, dict), on utilise la valeur prédéfinie None et on fait un test
au début de la fonction :
def maFonction(liste=None):
if liste is None:
liste = [1, 3]
Il est possible d’autoriser le passage d’un nombre arbitraire d’arguments en utilisant la notation d’un
argument final *nom. Les paramètres surnuméraires sont alors transmis sous la forme d’un tuple
affecté à cet argument (que l’on appelle généralement args).
def somme(*args):
"""Renvoie la somme du tuple <args>."""
resultat = 0
for nombre in args:
resultat += nombre
return resultat
# Exemples d'appel :
print(somme(23)) # 23
print(somme(23, 42, 13)) # 78
Attention
Réciproquement il est aussi possible de passer un tuple (en fait une séquence) à l’appel qui sera
décompressé en une liste de paramètres d’une fonction « classique » :
# Exemple d'appel :
elements = (2, 4, 6)
print(somme(*elements)) # 12
De la même façon, il est possible d’autoriser le passage d’un nombre arbitraire d’arguments nommés
en plus de ceux prévus lors de la définition en utilisant la notation d’un argument final **nom. Les
paramètres surnuméraires nommés sont alors transmis sous la forme d’un dictionnaire affecté à cet
argument (que l’on appelle généralement kwargs pour keyword args).
11
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
Réciproquement, il est aussi possible de passer un dictionnaire à l’appel d’une fonction, qui sera
décompressé et associé aux paramètres nommés de la fonction.
def unDict(**kwargs):
return kwargs
# Exemples d'appels
## par des paramètres nommés :
print(unDict(a=23, b=42)) # {'a': 23, 'b': 42}
## en fournissant un dictionnaire :
mots = {'d': 85, 'e': 14, 'f':9}
print(unDict(**mots)) # {'e': 14, 'd': 85, 'f': 9}
Attention
Si la fonction possède plusieurs arguments, le dictionnaire est en toute dernière position (après un
éventuel tuple).
On distingue :
La portée globale : celle du module ou du fichier script en cours. Un dictionnaire gère les objets
globaux : l’instruction globals() fournit les couples variable :valeur.
La portée locale : les objets internes aux fonctions sont locaux. Les objets globaux ne sont pas
modifiables dans les portées locales. L’instruction locals() fournit les couples variable :valeur.
Exemples de portée :
Par défaut, toute variable utilisée dans le corps d’une fonction est locale à celle-ci. Si une fonction a
besoin de modifier certaines variables globales, la première instruction de cette fonction doit être :
global <identificateurs>
x = 99
print(fonc(1)) # 102
print(x) # 101
12
Institut Préparatoire des Etudes d’Ingénieurs de Tunis Dr. Afef Ghabri
Classes : Première année MP/PC Année universitaire : 2020-2021
x = 99
print(fonc(1)) # 100
print(x) # 99
x = 99
print(fonc(1)) #4
print(x) # 99
Appel :
Exemple :
>>> f = lambda x, y: x + y
>>> f(3, 5)
13