Lycée Brizeux – 2015/2016 F ONCTIONS Informatique – PCSI B C HAPITRE 5 F ONCTIONS 1 Principe général Lorsqu’un bloc d’instructions revient plusieurs fois dans un programme, il peut s’avérer intéressant de l’« isoler » pour ne pas avoir à le réécrire entièrement chaque fois qu’on le sollicite : c’est l’un des rôles joués par les fonctions en informatique. . Une fonction est suite d’instructions dépendant de paramètres. . Déclarer une fonction en Python : la syntaxe pour déclarer une fonction nommée fonction, et ayant pour paramètres parametre_1, parametre_2, ... , parametre_n est la suivante : def fonction(parametre_1,parametre_2, ... ,parametre_n) : instructions Attention à la syntaxe : deux points à la fin de la première ligne et alinéa (indentation). . Exécution d’une fonction en Python : une fois la fonction fonction déclarée, on l’exécute en évaluant ses paramètres en des valeurs données, par la commande suivante : fonction(valeur_1,valeur_2, ... ,valeur_n) Exemples : On souhaite définir une fonction inverse renvoyant, pour un réel x donné, la valeur de 1 . x def inverse(x): print(1/x) Exécution : . l’instruction inverse(2) affiche la valeur 1 ; 2 . Problème : on ne peut pas utiliser la réponse dans un autre calcul. L’instruction print ne fait qu’afficher un résultat (type NoneType). 2 Commande return Pour qu’une fonction effectue, à partir des paramètres donnés, un calcul dont on veut récupérer la valeur, on utilisera la commande return, qui a pour effets : 1. de « renvoyer » le résultat souhaité ; 2. de mettre fin à l’exécution de la fonctions (quelles que soient les instructions qui suivent). 1 Exemples : pour définir la fonction x 7→ , on écrira : x def inverse(x): return 1/x 1 Lycée Brizeux – 2015/2016 Pour définir la fonction (x, y) 7→ F ONCTIONS Informatique – PCSI B x+y , on écrira : 2 def moyenne(x,y): return (x+y)/2 Exécution : . l’instruction inverse(2) + 3 renvoie la valeur 3.5 ; . l’instruction moyenne(1,2) renvoie la valeur 1.5 ; . l’instruction moyenne(0,inverse(2)) renvoie la valeur 0.25. Il est possible de renvoyer plusieurs résultats à la fois. Exemple : def sommeprod(x,y): return(x+y,x*y) 3 Documentation Pensez à toujours commenter vos programmes, en particulier les fonctions. On peut également proposer une documentation de la fonction. Pour cela, il suffit d’écrire, dès la deuxième ligne de la déclaration d’une fonction fonction, des commentaires délimités par des """ pour que ceux-ci apparaissent lorsqu’on demande l’aide de Python à propos de fonction. 1 x+y et (x, y) 7→ en proposant une « documentation » comx 2 plète pour chacune d’elles, on peut enrichir les déclarations précédentes comme suit : Exemples : pour définir les fonctions x 7→ def inverse(x): """inverse(x,réel)->réel Calcule l'inverse du réel x""" return 1/x def moyenne(x,y): """moyenne(x,y,réels)->réel Calcule la moyenne arithmétique de x et y""" return (x+y)/2 4 Variables locales Si une variable k est utilisée dans les instructions d’une fonction, la fonction va créer une nouvelle variable k , dite locale. Les affectations effectuées à l’intérieur de la fonction portent sur la variable locale et n’auront pas d’influence sur le contenu d’une variable k définie à l’extérieur de la fonction. Les variables d’entrées, ou arguments sont des variables locales dont le contenu initial est fourni lors de l’appel de la fonction. Exemple : def exemple(n) : for k in range(1,n): print(k) 2 Lycée Brizeux – 2015/2016 F ONCTIONS Informatique – PCSI B n = 5 k = 18 exemple(3) print(n,k) La variable k vaut toujours 5 et la variable k vaut toujours 18 après l’exécution de la fonction carres. 5 Interêt des fonctions L’utilisation de fonctions facilite la conception de programmes et améliore leur lisibilité. Un morceau de code assez basique qui sera souvent utilisé peut être écrit comme une fonction et utilisé plusieurs fois sans copier-coller. De plus, l’utilisation de variables locales limite les conflits de noms de variables (deux variables utilisées dans des contextes différents portant le même nom). Mais surtout, l’utilisation de fonctions améliore la lisibilité du code. Un long programme d’une centaine de lignes d’un bloc est absolument illisible. Le même programme structuré en une vingtaine de fonctions (au nom explicite, et au comportement décrit par un commentaire) de quelques lignes est beaucoup plus facile à appréhender. De plus, chaque fonction peut être utilisée et testée indépendamment, ce qui facilite le debuggage. Les fonctions sont à utiliser sans modération. 6 Exercices 1. Écrire une fonction estpair, prenant en entrée un entier n, qui retourne True si n est pair et False sinon. 2. Écrire une fonction factorielle, prenant en entrée un entier n et renvoyant n!. 3. Écrire une fonction carres, prenant en entrée deux entiers n et m et renvoyant la liste des carrés des entiers compris entre n et m. 1 . Celle-ci est 4. On considère la suite (u n ) définie, pour tout entier naturel n, par u n = 3 n +n +2 décroissante et converge vers 0. Écrire une fonction seuil prenant en entrée un flottant s et renvoyant le rang n à partir duquel u n 6 s. 3