cours d'initiation à la programmation modulaire sous Python en utilisant des fonctions et des procédures pour décomposer un problème en sous-problème plus facile à traiter en utilisant des fonctions et des procédures.
La programmation modulaire
Certains problèmes conduisent à des programmes longs, difficiles à écrire
et à comprendre. On les découpe en des parties appelées sous-programmes
ou modules.
Les fonctions et les procédures sont des modules (groupe d'instructions)
indépendants désignés par un nom. Elles ont plusieurs intérêts :
o Permettent de "factoriser" les programmes, càd de mettre en commun les
parties qui se répètent .
o permettent une structuration et une meilleure lisibilité des programmes .
o facilitent la maintenance du code (il suffit de modifier une seule fois).
o Ces procédures et fonctions peuvent éventuellement être réutilisées dans
d'autres programmes.
Définition d'une fonction
Syntaxe :
L'appel d'une fonction :
def nom_fonction (par1,par2,…,parN) :
bloc d’instructions
…
return expression
variable=Nom_fonction(par1,par2,…paraN)
Définition d'une fonction
Exemple 1:
Écrire une fonction volume_sphere(R) qui rend le volume
d'une sphère on utilisant la fonction cube(r) qui rend le cube du
rayon R. Sachant que V= (4*pi*cube(r)) /3
Définition d'une procédure
Syntaxe :
L'appel d'une fonction/procédure sans valeur de retour :
def nom_fonction (par1,par2,…,parN) :
bloc d’instructions
…
Nom_fonction(par1,par2,…paraN)
Définition d'une procédure
Exemple 1:
Écrire une fonction division(X,Y) qui affiche le quotient et le
reste de division de deux nombres réels(X ,Y)passés en paramètres.
Remarque
En python on peut utiliser les tuples pour renvoyer plusieurs
valeurs.
Exemple :
Exercices
1-Ecrire une fonction f(x) qui rend l'image de x selon la fonction
polynomiale: f (x):x7
+6x6
+15x4
+23x3
+x-9
2-Ecrire une fonction factorielle(N) qui prend en paramètre un entier positif
N, puis rend le factorielle de N .
N! = N * (N-1) *…* 3 * 2 * 1 (Par convention : 0 ! = 1)
3-Ecrire une fonction ordre(x,y,z) qui rend "Vrai" si les trois nombres passé
en paramètre sont rangés par ordre croissant, dans le cas contraire rend "Faux".
Les paramètres d'une fonction
Les paramètres servent à échanger des données entre le
programme principal et la fonction appelée.
Lors de l'appel d'une fonction, deux formes de paramètres
entrent en jeu : les paramètres formels et les paramètres effectifs.
Les paramètres d'une fonction
Les paramètres formels :
Les paramètres placés dans la déclaration d'une fonction sont appelés
paramètres formels. Ces paramètres peuvent prendre toutes les valeurs
possibles mais ils sont abstraits (n'existent pas réellement)
Les paramètres effectifs :
Les paramètres placés dans l'appel d'une fonction sont appelés
paramètres effectifs. Ils contiennent les valeurs pour effectuer le traitement.
Les paramètres d'une fonction
Exemple 1:
Ecrire une fonction maximum(N,M) qui prend en arguments
deux entiers N et M et qui rend la valeur maximale.
Les paramètres d'une fonction
Correction de l'exemple 1:
Paramètres formels
Paramètres formels
Les valeurs par défaut des paramètres
d'une fonction
Dans la définition d’une fonction, il est possible (et souvent
souhaitable) de définir une valeur par défaut pour chacun des
paramètres.
Les valeurs par défaut des paramètres
d'une fonction
Remarque :
Vous pouvez définir une valeur par défaut pour tous les
paramètres de la fonction.
Vous pouvez même définir 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.
La portée des variables
Selon l’emplacement de déclaration, on peut avoir deux types
de variables dans une fonction: des variables locales ou des
variables globales.
La porté désigne le champs ou l'emplacement de définition et
la durée de vie .
La portée des variables
Variables locale:
Est une variable déclarée dans le corps d’une fonction . Elle n’est accessible
qu’à l’intérieur de la fonction dans laquelle elle a été déclarée.
Variables globale:
Est une variable définie en dehors d'une fonction. Elle est visible et
utilisable dans tout le programme (mais la fonction ne peut pas le modifier)
La portée des variables : variable globale
Exemple :
Le mot-clé global permet de modifier une variable globale à
l'intérieur d'une fonction.
Transmission(passage) des paramètres
Les échanges d'informations entre une fonction et le
programme principale se font par l'intermédiaire de paramètres.
Il existe deux principaux types de passages de paramètres qui
permettent des usages différents :
Le passage par valeur et le passage par référence(adresse).
Le passage par valeur
Dans ce type de passage, le paramètre formel reçoit
uniquement une copie de la valeur du paramètre effectif. La
valeur du paramètre effectifs ne sera jamais modifiée.
Les variables de type numériques et de type non
modifiables(chaîne (str),tuple) passent par valeur.
Le passage par référence
Dans ce type de passage, la fonction utilise l'adresse du
paramètre effectif. Lorsqu'on utilise l'adresse du paramètre, on
accède directement à son contenu. La valeur de la variable
effective sera donc modifiée.
Les variables modifiables(liste,dictionnaire,ensembles)passent
par référence (adresse).
La fonction anonyme "lambda"
Python permet la création de fonctions anonymes (sans nom
et donc non définie par def) à l’aide du mot-clé lambda.
Une fonction anonyme ne peut pas avoir d’instruction return
et doit forcément retourner une expression.
Syntaxe :
Variable=lambda par1,par2,…,parN : Expression
La fonction anonyme "lambda"
Exemple :
Avec def Avec lambda
def som(a,b):
return (a+b)
som=lambda a,b:a+b
#appel de la fonction
som(a,b)
def carre(n):
return (n*2)
carre=lambda n:n*2
#appel de la fontion
caree(n)
def absolue(n):
if n<0:
n=n*(-1)
return n
abs=lambda n:n if n>=0 else -n
#appel de la fontion
abs(n)
Les fonctions récursives
Une fonction est dite récursive si elle s’appelle elle-même : on
parle alors d’appel récursif de la fonction.
Tout fonction récursif doit posséder un cas limite (cas trivial)
qui arrête la récursivité.
Exemple :