Vous êtes sur la page 1sur 57

DAHMANI SOUFIANE

dahmani.soufiane@gmail.com
Lycée Omar Ibn Abdelaziz- CPGE
OUJDA
2
1. Introduction
2. Notion de Fonction
3. Passage par valeur
4. Variables locales / Variables globales
5. La valeur de retour
6. Les fonctions récursives
7. Arguments nommés
8. Fonctions variadiques
9. Documenter ses fonctions

3
 Nous avons déjà vu beaucoup de fonctions
: print(), type(), len(), input(), range()...
Ce sont des fonctions pré-définies (built-in
functions).
Nous avons aussi la possibilité de créer nos
propres fonctions !

4
 Fonction, procédure, méthode
 Partie de code informatique
« séparée »
 Avantages :
◦ Mettre en évidence un traitement en
précisant les données et les résultats
◦ Faciliter la « maintenance » du code
 Eviter des erreurs liées aux modifications
d’un code « dupliqué »

5
6
 Les fonctions servent à rendre votre
programme modulaire et à éviter de répéter
plusieurs fois le même code. Une fonction est
définie par son prototype (c’est à dire : son
nom, ses arguments et son type de retour) et,
évidemment, aussi par son code.

7
 Les arguments sont des variables passées en
paramètres à la fonction.
 Ils ne sont pas typés a priori mais sont
substituées dynamiquement dans le code de
la fonction lors de l’exécution.
 Dans l’exemple ci-dessus, les variables a et b
peuvent être des booléens, des entiers, des
flottants, des tuples, des listes ou des
dictionnaires.

8
 Le type de retour correspond à ce que
retourne la fonction. Le mot clef ’return’
permet de spécifier la fin de la fonction et la
variable qu’elle retourne.
 Le langage Python accepte qu’une fonction
retourne plusieurs types différents. Dans
l’exemple ci-dessus, la fonction retourne une
variable du même type que a ou b ou bien
None.

9
def salutation(nom,sexe):
if sexe=="F":
str="bonjour Mademoiselle " + nom
else:
str="bonjour Monsieur " + nom
return str

10
11
 Une fonction est une portion de code que l'on
peut appeler au besoin (c'est une sorte de
sous-programme).
 L'utilisation des fonctions évite des
redondances dans le code : on obtient ainsi
des programmes plus courts et plus lisibles.
 Par exemple, nous avons besoin de convertir
à plusieurs reprises des degrés Celsius en
degrés Fahrenheit :

12
13
Rien ne vous oblige à définir des fonctions dans vos scripts,
mais cela est tellement pratique qu'il serait improductif de s'en
passer !

14
 Syntaxe

15
16
Une fois la fonction définie, nous pouvons
l'appeler :

17
18
 Le passage par valeur signifie que seules des
copies des valeurs sont utilisée dans les
fonctions mais pas les variables originales.
 Les changements effectués sur les variables
ne sortent pas de la fonction. En fait, la seule
façon de récupère les changements opérés
sur la variable est de la passer via le ’return’.
 Voici deux exemples qui explicitent le
fonctionnement du passage par valeur et
comment utiliser le ’return’.

19
20
 La portée d'une variable est l'endroit du
programme où on peut accéder à la variable.
 Observons le script suivant :

21
 Nous avons deux variables différentes qui
portent le même nom a
 Une variable a de valeur 20 est créée dans la
fonction : c'est une variable locale à la
fonction.
 Elle est détruite dès que l'on sort de la
fonction.

22
 La portée d’une variable (variable scope)
correspond à l’ensemble des lignes dans lesquelles
la variable peut être appelée. Lorsqu’on est en
dehors de la portée d’une variable et que l’on fait
appel à elle, le programme provoque une erreur :

23
 Une variable est dites “globale” si sa portée
recouvre l’ensemble du programme.
 Une variable est dites “locale” si sa portée
recouvre seulement une partie du
programme.

24
 L'instruction global rend une variable globale
:

25
 il est préférable d'éviter l'utilisation de
l'instruction global car c'est une source
d'erreurs (on peut ainsi modifier le contenu
d'une variable globale en croyant agir sur une
variable locale).
La sagesse recommande donc de suivre la
règle suivante :
 ne jamais affecter dans un bloc de code local
une variable de même nom qu'une variable
globale

26
 La valeur de retour d’une fonction est
signalée par le mot-clef return.
 Il n’est pas obligatoire (car implicite à la fin
du bloc qui constitue la fonction).
 Mais, il sert à marquer la fin de la fonction
même si le bloc n’est pas achevé.

27
 On peut l’utiliser vide, pour retourner None,
ou bien avec une valeur ou une variable pour
retourner un contenu ou sous la forme d’un
tuple, si on désire retourner un ensemble de
variables ou de valeurs.

28
 1-Écrire une fonction find(n, l) qui cherche
s’il existe au moins un élément plus petit que
’n’ dans la liste d’entiers ’l’.

29
 2- Écrire une fonction maxi(l) qui extrait le
plus grand entier de la liste ’l’.

30
 Une fonction est dites récursive si elle s’appelle
elle-même pour construire le résultat qu’elle
retourne.
 Une fonction récursive est dites récursive terminale
si tout appel récursif est de la forme return f(...) (et
pas autre chose en dehors de l’appel à la fonction
elle-même). C’est à dire que le calcul final de la
fonction récursive se fait à la terminaison de celle-
ci sans avoir à remonter la chaîne des appels
récursifs.
 Cela permet de traduire informatiquement l’idée de
récurrence en mathématiques.

31
 Écrire une fonction récursive, c’est écrire :
 Une condition d’arrêt , très importante,
correspondant à l’initialisation de la
récurrence,
 Un ou plusieurs appels récursifs,
correspondant à l’hérédité.

32
 # le code itératif d’une # le code d’une fonction
fonction calculant la récursive calculant la
factorielle : factorielle
 def fact(n): def fact(n):
◦ p=1 if n == 0:
◦ for i in range(1,n+1): return 1
 p=p*i else:
◦ return p
return n*fact(n-1)

33
34
35
 L’interpréteur gère une pile dite de récursion
pour les appels successifs puis les calculs à
effectuer.

36
37
 En Python, la pile de récursion est limitée à 1
000 appels environ. Il est possible de
modifier cette limite :

38
 Une fonction récursive terminale n'effectue
pas d'autre opération qu'un dépilement après
l'appelle récursif ou le test d'arrêt de la
récursivité.
 Une fonction récursive non terminale fabrique
son résultat au dépilement des fonctions.
Lors d'une récursivité terminale, il est inutile
de sauver le contexte de la fonction. Si le
compilateur peut optimiser, on gagne en
espace mémoire et en temps d'exécution.

39
 1. Écrire une fonction stars(n) qui affiche un
triangle d’étoiles à l’écran

40
 2. Écrire une fonction récursive terminale
multiply(n, m) qui retourne ’n * m’

41
 Les arguments nommés permettent de donner des
noms et des valeurs par défaut à certains
arguments d’une fonction. Les arguments nommés
deviennent optionnels lors de l’appel à la fonction.

42
 Les arguments non-nommés doivent être
placés, toujours dans le même ordre, au
début de la fonction et les arguments
nommés toujours à la fin. Si ce n’est pas le
cas, une erreur ’non-keyword arg after
keyword arg’ est levée.

43
 Une fonction variadique est une fonction dont
le nombre d’arguments est variable. C’est à
dire que l’on peut y mettre le nombre
d’arguments que l’on veut (mais pas
n’importe quoi !).
 En Python, marquer un des arguments d’une
fonction par une étoile (*) permet de signaler
que cet argument sera un tuple dont on ne
connait pas a priori le nombre d’éléments. Un
exemple classique de fonction variadique est
la fonction print().

44
45
46
47
 Vous pouvez utiliser un dictionnaire en
paramètres pour cela vous devez ajouter une
double étoile: **
 >>> def ma_fiche(**parametres):
 ... return parametres["prenom"]
 ...
 >>> ma_fiche(prenom="soufiane")
 'soufiane'

48
 Les docstrings sont des chaînes de caractères
qui suivent immédiatement le ’def’ et qui
constituent la documentation de la fonction
en question. Cette documentation permet de
comprendre ce que fait la fonction et d’aider
à l’utiliser correctement.

49
50
 1. Pensez à une version récursive de la
fonction f (n) = 3 * n, c'est-à-dire les
multiples de 3.
 2. Ecrit une fonction Python récursive qui
renvoie la somme des n premiers entiers.
(Indice: La fonction sera similaire à la fonction
factorielle!)
 3. Ecrire une fonction qui implémente le
triangle de Pascal:

51
 Solution à notre premier exercice sur la récursivité:
 Mathématiquement, nous pouvons l'écrire comme
ceci:
 f (1) = 3,
 f (n + 1) = f (n) + 3
 Une fonction Python peut être écrite comme ceci:

52
53
54
 https://docs.python.org/fr/3/library/math.ht
ml

55
56
 http://www.fil.univ-
lille1.fr/~marvie/python/chapitre1.html#
 http://fsincere.free.fr/isn/python/cours_pyth
on_ch4.php
 https://perso.esiee.fr/~georgesj/esiee/b1st0
1/tp4_sol.pdf
 http://apprendre-python.com/page-
apprendre-listes-list-tableaux-tableaux-
liste-array-python-cours-debutant

57

Vous aimerez peut-être aussi