Programmation Impérative 6 : Plan Retour qtido Programmation Impérative Fonctions Python Fonctions en Python Pile d'Appels de Fonctions Paramètres par Défauts Fonctions et Programmes Fonctions Comme Outils d'Abstraction 6 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python Programmation Impérative 6 : Plan Programmation Impérative 6 : Plan Retour qtido Retour qtido Fonctions en Python Fonctions en Python Pile d'Appels de Fonctions Pile d'Appels de Fonctions Paramètres par Défauts Paramètres par Défauts Fonctions et Programmes Fonctions et Programmes Fonctions Comme Outils d'Abstraction Fonctions Comme Outils d'Abstraction 15 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python 19 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python Fonctions en Python Utilisation de Fonctions en Python Les bibliothèques fournissent des fonctions Il est possible d'écrire ses propres fonctions ne pas réinventer la roue (pas plus d'une fois) éviter de se répéter éviter le copier/coller Qu'est ce qu'une fonction un nom une liste de noms de paramètres un corps (suite d'instructions) possiblement une valeur retournée Exemples 1 2 3 4 5 6 7 8 import math from qtido import * print(math.log10(1000)) d = math.sqrt(16+9) print(d) f = creer(800, 600) rectangle(f, 10, 10, 510, 510) Quelles fonctions sont utilisées ci dessus ? qtido.creer, qtido.rectangle, math.log10, math.sqrt, print Un appel de fonction a une valeur math.log10(100) vaut 3.0 (que l'on passe à print ) creer(800,600) vaut une valeur représentant la fenêtre créée print(d) vaut None None est une valeur spéciale en Python, indiquant l'absence de valeur 20 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python 21 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python Définition de Fonctions en Python 1 2 3 4 5 6 7 8 9 10 11 import math # les fonctions courtes peuvent être sur une ligne def puissance(a, b): return a**b def info(message): print("INFO :", message) def distance_origine(x, y): "renvoie la distance du point (x,y) à l'origine)" d = x*x + y*y return math.sqrt(d) Suivant le modèle 1 def «nom» ( «liste-param» ): 2 "documentation de la fonction, 3 «instr» # dans le corps de la 4 «instr» # dans le corps de la 5 … # dans le corps de la optionnelle" fonction fonction fonction def , ( , ) , : et l'indentation sont obligatoires dans «liste-param», les noms sont séparés par des , 1 2 3 4 5 6 7 8 9 10 11 Appel de Fonction et Valeur de Retour 1 def puissance(a, b): 2 print("notons que a vaut", a) 3 return a**b 4 5 v = puissance(2*21, 4) 6 v2 = puissance(12, 2) À chaque fois qu'une fonction est appelée (ex, puissance(2*21, 4) ) les valeurs de paramètres sont calculées (ex, 42 et 4) ... et affectées à des variables (ex, a=42 et b=4) le corps de la fonction est exécuté (le print, puis le return) ... jusque la fin ou jusque return la valeur de l'appel est la valeur retournée (ex, puissance(2*21, 4) vaut 3111696 ) return renvoie la valeur et interrompt la fonction si la fin arrive sans return , la fonction renvoie None NB : chaque fonction a ses propres variables dites « locales » 22 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python 23 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python Portée et Visibilité des Variables Programmation Impérative 6 : Plan a = b = c = def 1 2 3 fun(b, d): print(a) # c = 10 # print(c) # e = 3.14 # fun(1, 1) print(c) Retour qtido # b cache le b global lecture seulement -> lit le a global affectation -> nouvelle, qui cache le c global 10 variable locale # 1 10 # 3 Variable globale Fonctions en Python Pile d'Appels de Fonctions Paramètres par Défauts Fonctions et Programmes Fonctions Comme Outils d'Abstraction définie (affectées) dans la partie principale du programme (sans indentation, ou dans un if, for, while) visible de partout dans le programme Variable locale définie dans une fonction (ou en paramètres d'une fonction) visible uniquement dans la fonction, changée à chaque appel cache possible une variable globale du même nom Ne pas utiliser trop de variables globales ! 24 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python 27 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python Pile d'Appels de Fonctions Qu'affiche ce programme ? 1 2 3 4 5 6 7 8 9 10 11 x=42 def mystere(x, p): if x <= 1: res = 1 else: res = x * mystere(x-1, p+1) print(p*" ", res) return res Points Clés Définition de fonction en python Pile d'appels chaque appel de fonction a ses propres variables copie des valeurs passées en argument stockage dans une pile en cas d'appels récursifs x = mystere(4, 0) print(x) Pile d'appels chaque appel de fonction a ses propres variables copie des valeurs passées en argument stockage dans une pile en cas d'appels récursifs 28 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python 29 / 29 − Rémi Emonet − Programmation Impérative Fonctions Python