Cours d’Informatique Scientifique
Programmation en Python Cours 3/8
Laurent Pointal
laurent.pointal @ limsi.fr
@ laposte.net
Programme de la séance
● Les fonctions
● Pourquoi faire
● Syntaxe
● Paramètres
● Visibilité / portée des variables
● Valeur de retour
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 3 15
v2.2
Pourquoi des fonctions ?
●
Réutiliser un bloc d’instructions
●
Regroupement de blocs de code souvent répétés
●
Codage et maintenance à un endroit
●
Éventuellement dans un module séparé, et réutilisable dans différents programmes
●
Découper un problème en sous-tâches
●
Tache simple à appréhender
fonction(entrées) ➔ sorties
●
Code plus facile à tester isolément
●
Programme plus simple à comprendre, une
fonction étant identifiée pour réaliser une tâche
particulière
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 4 15
v2.2
Une fonction
Un nom associé à un bloc d’instructions composées pour réaliser un traitement particulier.
def nom():
Bloc exécuté
lorsque l’on appelle la fonction.
Définition
Utilisation - l’instruction d’“appel” de la fonction
Lors de la définition de la
fonction, son bloc d’instructions n’est pas exécuté!
nom()
À chaque appel de la fonction, son bloc d’instructions est
exécuté.
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 5 15
v2.2
Exemple fonction simple
def fct():
print("=" * 64)
print(" ALERTE " * 8)
print("=" * 64)
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 6 15
v2.2
L’appel de la fonction
def fct():
fct()
fct()
:
fct()
À chaque appel d’une fonction est mémorisé l’endroit
d’où l’on vient, pour continuer l’exécution à l’instruction
juste après lorsque l’on sort de la fonction.
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 7 15
v2.2
Code répété sur différentes données
Calcul et affichage de la
moyenne et des mini et maxi
notesanglais = [12, 11, 8, 15, 12 ] somme = 0
mini = maxi = notesanglais[0]
for note in notesanglais:
somme = somme + note if note > maxi:
maxi = note if note < mini:
mini = note
moy = somme / len(notesanglais)
print("Anglais:", moy, "(", mini, "à", maxi, ")")
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 8 15
v2.2
Code factorisé en fonction simple
Code factorisé dans une fonction.
Données reçues en paramètres.
def moyenne(p_matiere, p_listenotes):
somme = 0
mini = maxi = p_listenotes[0]
for note in p_listenotes:
somme = somme + note if note > maxi:
maxi = note if note < mini:
mini = note
moy = somme / len(p_listenotes)
print(matiere, ":", moy, "(", mini, "à",
maxi, ")")
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 9 15
v2.2
Fonction retournant une valeur
Ajout de l'instruction de retour de valeur.
def moyenne(p_matiere, p_listenotes):
somme = 0
mini = maxi = p_listenotes[0]
for note in p_listenotes:
somme = somme + note if note > maxi:
maxi = note if note < mini:
mini = note
moy = somme / len(p_listenotes)
print(matiere, ":", moy, "(", mini, "à", maxi, ")")
return moy
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 10 15
v2.2
Variables locales à la fonction
Variables affectées dans le bloc de la fonction.
N’existent que dans le bloc de la fonction, pendant son exécution.
Détruites lorsque l’on sort du bloc de la fonction.
Nouvelles valeurs à chaque nouvel appel de la fonction (pas de mémoire entre deux appels) .
def moyenne(p_matiere, p_listenotes):
somme = 0
mini = maxi = p_listenotes[0]
for note in p_listenotes:
somme = somme + note ...
moy = somme / len(p_listenotes)
print(matiere, ":", moy, "(", mini, "à",
maxi, ")")
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 11 15
v2.2
Variables globales au module
Variables affectées dans le module Python (fichier script .py), hors des fonctions.
Existent pendant toute la durée de l’exécution du programme.
Un seul exemplaire commun pour tout le module.
def moyenne(p_matiere, p_listenotes):
...
return moy
nom = input("Nom de l'étudiant:")
r1 = moyenne("Anglais", [12, 11, 8, 15, 12 ]) r2 = moyenne("Français", [16.2, ...15.2 ])
r3 = moyenne("Info. Sci.:", [8.3, ...12.4 ]) r4 = moyenne("Math",[10.3, ... 10.5 ])
tot = moyenne("TOTAL", [r1, r2, r3, r4])
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 12 15
v2.2
Visibilité des noms (‘portée’)
“Builtins” (int, float, str…, print, input…, True, False, None)
globales module truc (fichier truc.py) MAX=100
supermax=4*MAX def f() :
x=3*supermax
globales module chose (fichier chose.py) start=0
supermax=20 def f() : y=22
x=start+1 def g() :
a=supermax-start
locales 1
erappel à f() x
locales 2
èmeappel à f() x
locales 1
erappel à f() x,y
locales 1
erappel à g() a
locales 3
èmeappel à f() x
locales 4
èmeappel à f() x
locales 2
èmeappel à g() a
locales 2
erappel à f()
x,y
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 13 15
v2.2
Affectation des globales dans les fonctions
➔ Déclaration global nom dans la fonction Pour réaffecter une globale dans une fonction
Par défaut l’affectation dans une fonction crée une variable locale.
compteur = 0
def comptage_affichage(p_message):
global compteur
compteur = compteur + 1
print(compteur,"==>",p_message)
comptage_affichage("Premier")
comptage_affichage("Second")
comptage_affichage("Blabla")
aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 14 15
v2.2
Documenter & Tester les fonctions
Documenter, par exemple avec une chaîne multilignes:
Tester, avant de les utiliser ailleurs:
La documentation est accessible en mode calculatrice avec help(tirage_des).
●
Séquence de test dans le programme.
●
Ou fonction de test/validation pour la tâche.
●
Ou code d’auto-test (quand nous verrons les modules).
import random
def tirage_des(p_nbdes, p_nbfaces):
"""Tirage aléatoire d'une série de dés à n faces.
Retourne une liste de p_nbdes tirages aléatoires de valeurs entières entre 1 et p_nbfaces.
"""
tirages = []
for d in range(p_nbdes) :
tirages.append (random. randint(1, p_nbfaces))
return tirages
t PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 3/8 15 15
v2.2