Pour l'instant, nous avons créé des programmes ni trop long ni trop complexe mais quand on va s'attaquer à des problèmes plus complexes, il va devenir indispensable de découper notre programme en sous-programmes plus petit pour le clarifier et pour le rendre plus facile à écrire et à débugguer. C'est dans ce but que nous allons voir comment créer des fonctions. Les fonctions permettent aussi d'éviter d’écrire plusieurs fois un code qui fait toujours la même chose exactement comme en maths lorsqu'on appelle f la fonction plutôt qu'écrire à chaque fois tous les calculs qu'il faudrait faire à partir de x.
def nom_de_la_fonction (parametre_1, parametre_2):
#ce que doit faire la fonction
def
pour expliquer qu'on définit une fonction.nom_de_la_fonction
: vous pouvez mettre des lettres et chiffres (mais pas en premier) dans le nom mais pas d'espace.parametres
: il faut préciser les paramètres de votre fonction comme en math pour f(x), le paramètre est x. Dans l'exemple que j'ai donné, il y a 2 paramètres mais il peut y en avoir autant que necessaire ou pas du tout. Dans le cas où il n'y a pas de paramètre il faut quand même mettre les parenthèses.:
On n'oublie pas les 2 points à la fin de la ligne ni l'indentation dans tout ce qui est à exécuter dans la fonction.def addition(a,b):
print(a+b)
>>> addition(2,3)
5
>>> addition("ab","abc")
"ababc"
>>> addition([1, 2, 3] , [1, 2] )
[1, 2, 3, 1, 2]
a
et b
étaient des entiers donc python fera une addition de tout ce qu'il sait additionner comme ici les chaines de caractères ou les listes.def dire_chut() :
print("Chhhhhhhhhuuuuuuuut!")
dire_chut()
et qui affichera "Chhhhhhhhhuuuuuuuut!"
.def ma_fonction(a) :
addition(a,3)
dire_chut()
for i in range(2):
addition(i,a)
>>>ma_fonction(4)
7
Chhhhhhhhhuuuuuuuut!
4
5
return
:>>>resultat=addition(2,3)
5
>>>print(resultat)
None
addition(2,3)
dans resultat
il affiche quelque chose et quand on veut afficher resultat
il affiche None
c'est a dire vide. Que se passe-t-il ? En fait c'est très simple, quand on lance addition(2,3)
, il exécute la fonction dans laquelle on demande d'afficher a+b
. Mais l'affichage se fait dans la console donc c'est comme si Python nous avait envoyé le résultat à nous et donc ne peut pas l'utiliser pour le mettre dans la variable resultat
.return
au lieu de print
.def addition(a,b):
return a+b
>>>resultat=addition(2,3)
>>>print(resultat)
5
return
) ou bien juste afficher pour nous le résultat (dans ce cas c'est print
)return
arrete la fonction :return
, la fonction s’arrête. Autrement dit il faut être sûr d'avoir fait tout ce que l'on souhaitait faire avec notre fonction avant de lancer return
pour renvoyer le résultat. Cela peut être cependant très pratique par exemple dans une boucle for, dès qu'on a le résultat voulu, on le renvoie sans avoir besoin de finir la boucle.def chercher(liste):
for nombre in liste:
if nombre==0:
return True
return False
def somme(n):
if n==1:
return 1
else :
return somme(n-1)+n
somme(3)
: else
. On renvoie somme(2)+3
. mais comme on ne connait pas encore somme(2)
, on met de calcul en mémoire le temps de le calculer.somme(2)
: comme 2 ne vaut pas 1 donc on exécute le else
. On renvoie somme(1)+2
. mais comme on ne connait pas encore somme(1)
, on met de calcul en mémoire le temps de le calculer.somme(1)
: comme 1 == 1, on renvoie 1.somme(1)
, on peut calculer somme(1)+2
. de l'étape 2 ce qui nous donne 3 comme valeur pour somme(2)
.somme(2)
, on peut calculer somme(2)+3
. de l'étape 1 ce qui nous donne 6 comme valeur pour somme(3)
. Comme c'était la valeur demandée initialement, le programme renvoie 6.import sys
sys.setrecursionlimit( la_valeur_que_je_veux)
def fonction(n):
a=n+1
fonction(3)
print(a)
a
n'existe pas. Le a
à l'intérieur de la fonction est ce qu'on appelle une variable locale qui n'existe que dans la fonction pas en dehors.a=18
def fonction(n):
a=n+1
fonction(3)
print(a)
print(a)
affichera 18 bien que dans la fonction, a
prenne la valeur 3+1. Python différencie donc les variables globales (comme le a
qui vaut 18) des variables locales (le a
qui prend les valeurs n+1 de la fonction)global
suivi des nombres des variables globales qu'on voudra modifier dans la fonction. Par exemple :a=18
def fonction(n):
global a
a=n+1
fonction(3)
print(a)
print(a)
affichera 4 car le a
modifié par la fonction est la variable globale.