Python : Les fonctions

54.02k views7753 WordsCopy TextShare
Docstring
Dans cette vidéo, je te montre tout ce que tu as besoin de savoir sur les fonctions. À quoi sert une...
Video Transcript:
la vidéo que vous êtes en train de regarder provient des formations gratuites de doc string si vous souhaitez en voir davantage vous pouvez vous inscrire sur doc string point fr pour profiter de toutes les formations disponibles sur le site vous trouverez tous les liens à ce sujet dans la description également si vous souhaitez davantage de formations gratuites n'hésitez pas à vous abonner à la chaîne youtube et à mettre un pouce bleus pour encourager la création de nouveaux contenus les fonctions c'est une partie très importante de la programmation et si vous avez déjà suivi quelques cours
de maths dans votre vie ça devrait vous rappeler quelque chose les fonctions on en est déjà utilisé plusieurs à travers la formation comme par exemple print skype ou encore input avec les fonctions on va pouvoir faire principalement deux choses déjà allégé et réutilisées notre code si on a un code qu'on utilise très souvent plutôt que de le copier coller à plusieurs endroits on va pouvoir mettre ce code dans une fonction est appelée cette fonction pour exécuter tout le code qu'elle contient du coup on va pouvoir également segmenté notre code et éviter d'avoir tout à l'intérieur
d'un même fichier donc on y reviendra dans la partie sur les modules mais vous verrez qu'avec les fonctions on va surtout commencé à mieux organiser notre code pour qu'il soit plus facile à lire et à modifier on distingue deux types de fonctions les fonctions sans valeur retour et les fonctions avec valeur retour dans les fonctions sans valeur retour on retrouve des fonctions qui vont juste exécuter une action comme par exemple la fonction print qu'on utilise pour afficher du texte ou une fonction qu'on pourrait créer pour ajouter un utilisateur à une base de données par exemple
ses fonctions ne nous retourne rien on les utilise uniquement pour exécuter le code qu'elles contiennent ensuite dans les fonctions avec valeur retour on retrouve par exemple la fonction -type cette fonction nous retourne le type d'une variable qu'on lui passe on veut donc récupérer une information à partir de cette fonction on pourrait également avoir une fonction qu'on utilise pour par exemple récupérer l'e-mail d'un utilisateur dans ce cas ci la valeur retour serait une adresse email le mot-clé qu'on va utiliser pour créer une fonction c'est le modef qui est le raccourci de define qui veut dire définir
au niveau de la syntaxe on retrouve donc en premier le modef puis ensuite le nom de la fonction suivi par 2 par en tête ces parenthèses elles sont obligatoires même si pour l'instant elles ne contiennent aucune valeur si vous ne mettez pas à ces parenthèses python vous retournera une erreur on retrouve ensuite les deux éléments constitutifs d'un bloc d'instruction à savoir les deux points et l'inde entation qui permettent de spécifier le code qui va appartenir à la fonction tout simplement quand on crée une fonction on dit qu'on l'a défini une fois qu'une fonction est définie
elle est enregistrée dans notre code et on peut donc l'appeler tout simplement grâce à son nom là encore pour appeler une fonction vous avez besoin de mettre les parenthèses après le nom de la fonction même si on ne met là encore rien à l'intérieur les parenthèses elles vont signifier à piton qu'on veut appeler la fonction et exécuter le code qu'elle contient en effet le seul fait de définir une fonction comme on l'a vu précédemment ça ne va pas exécuter le code de la fonction pour exécuter le code à l'intérieur d'une fonction il faut l'appeler c'est
de cette façon qu'on va pouvoir définir une fonction à un seul endroit dans notre script et pouvoir l'appeler par la suite autant de fois que nécessaire donc voilà pour la théorie de base sur les fonctions ainsi que la syntaxe et dans les prochaines parties on va voir comment cette fois ci crée des fonctions qui peuvent nous retourner des informations donc des fonctions avec valeur retour une fonction on peut lui demander de retourner une valeur pour retourner une valeur on utilise tout simplement le mot return suivi de la valeur qu'on veut retourner par exemple on pourrait
créer une fonction dont le seul objectif c'est de nous retourner le nombre 5 donc c'est un exemple très simple et qui ne sert pas à grand chose mais c'est juste pour vous montrer le fonctionnement de britten cette valeur qu'on retourne il va falloir la récupérer pour ça on fait tout simplement une assignation qui nous permet de récupérer la valeur retourner dans une variable dans ce cas ci a sera donc égale à la valeur retournez donc à 5 il faut savoir que l'instruction written elle a pour effet d'arrêter la fonction quand python tombe sur cette instruction
il retourne la valeur et il sort de la fonction dans un cas comme celui ci par exemple on dit que la fonction prime après le rituel est un code inatteignable en effet cette ligne de code ne peut en aucun cas être exécutée car l'instruction written va arrêter la fonction avant qu'on arrive print si on regarde un exemple un peu plus parlant on pourrait avoir une fonction qui a pour but de vérifier si un fichier existe ou non si c'est le cas on retourne un boulet un trou et sinon on retourne falls cette fonction on peut
donc la réécrire plus simplement justement parce que britten nous fait sortir de la fonction on regarde donc la structure conditionnelle qui vérifie si le fichier existe si c'est le cas on retourne tout est donc la dernière ligne de la fonction qu'ils retournent la valeur fault ne sera pas exécutée al'inverse si le fichier n'existe pas on ne passe pas à l'intérieur de la structure conditionnelle et on retourne tout simplement le boulet informs et la fonction s'arrête là d'ailleurs dans cet exemple on peut encore simplifier notre code en retournant directement le résultat de la fonction os point
pâte points existe c'est une erreur que je vois beaucoup de débutants faire la fonction os point par point existe elle retourne déjà un boulet 1 donc vous n'avez pas besoin de rajouter une structure conditionnelle pour retourner vrai ou faux vous pouvez retourner directement le résultat de la fonction os - pat points existe qui sera déjà un boulet pour terminer il faut savoir que même si vous n'utilisez pas l'instruction written une fonction va toujours retourner quelques choses de façon implicite ce quelque chose c'est l'objet nonne qui signifie rien donc même si vous faites une fonction qui
ne contient rien ou qui ne retourneraient rien python va de façon implicite faire un return de cet objet non donc je vous la corde que ça ne sert pas à grand chose mais c'est tout de même quelque chose d'important à savoir le néant n'existe pas donc quand vous faites une affectation comme ici avec à égal test il faut bien que python assigne quelque chose à cette variable et ce quelque chose qui est retourné donc implicitement par votre fonction c'est cet objet note donc dans cette partie on a vu que pour retourner une valeur à l'intérieur
d'une fonction on utilise l'instruction return cette instruction elle va avoir pour effet d'arrêter l'exécution de la fonction et on a vu également que même si vous ne retournais rien par défaut une fonction va retourner lobjet dun donc voilà pour cette instruction written et dans la prochaine partie on va voir comment modifier le code qui se trouve à l'intérieur de notre fonction grâce à l'ajout de paramètres dans la partie précédente on a vu comment retourner des informations depuis une fonction dans cette partie on va voir comment cette fois-ci envoyer des informations à une fonction afin de
modifier le code qu'elle contient donc c'est là qu'on va utiliser ces fameuses parenthèse qui jusqu'à présent étaient restés vides à l'intérieur des parenthèses quand on dit fini la fonction on peut indiquer un ou plusieurs paramètres donc dans ce cas si j'ai un paramètre qui s'appelle message que j'affiche ensuite avec print à l'intérieur de ma fonction du coup quand on appelle la fonction on peut passer une valeur à ce paramètre alors avant d'aller plus loin je veux juste clarifier les choses par rapport à la terminologie le message qu'on met entre les parenthèses quand on définit la
fonction on appelle ça un paramètre quand on appelle la fonction cependant et qu'on envoie une valeur à ce paramètre on dit qu'on en voit un argument donc les paramètres c'est le nom des variables qui sont définies dans la fonction et les arguments c'est les valeurs qu'on va envoyer à ces paramètres donc je tenais à clarifier cette terminologie car ça arrive très souvent que les gens mélangent les deux et du coup ça se peut que dans certains tutoriel vous n'entendiez que l'un ou l'autre des thermes ou même qu'ils soient utilisés de la mauvaise façon donc personnellement
je pense qu'il est très important d'utiliser les bons termes pour qu'on se comprenne bien dans le reste de la formation et qu'il soit clair à quoi en fait référence quand on parle de paramètres ou d'arguments donc voilà pour la petite parenthèse donc du coup quand on appelle la fonction affiche on peut passer un argument à cette fonction dans ce cas ci la chaîne de caractères bonjour et cet argument il va être récupérée par la fonction dans le paramètre message que l'on va pouvoir ensuite utilisé comme n'importe quel variable à l'intérieur de la fonction donc là
on fait tout simplement un print de cette variable message qui va donc être affiché à l'écran alors il faut bien faire attention avec les paramètres parce que dans un cas comme celui ci si on utilise la fonction affiche sans rien lui passé en argument on va se retrouver avec une erreur vu qu'on l'envoie rien à la fonction message ne sera pas défini et donc quand on va vouloir print est la variable message python ne sera pas quoi afficher et donc on aura une erreur vous êtes donc obligé dans ce cas de figure d'envoyer quelque chose
à la fonction le paramètre message est donc un paramètre qu'on appelle obligatoires heureusement on peut définir des valeurs par défaut pour les paramètres dans ce cas ci on va les indiqué directement dans la définition de la fonction donc maintenant si j'appelle ma fonction affiche sans lui passé d'arguments il va utiliser la chaîne de caractères par défaut que j'ai défini dans la fonction donc dans ce cas ci la fonction va prêter message par défaut puisque je n'ai rien indiqué lors de l'appel de ma fonction si par contre on choisit d'envoyer un argument lors de l'appel de
la fonction là c'est l'argument envoyé qui va être pris en compte et qui va être assigné à message donc la valeur par défaut qu'on définit dans la fonction elle est utilisée que si on n'envoie aucun argument sinon c'est l'argument envoyé qui prime comme je vous ai dit au début de cette partie on peut définir autant de paramètres que l'on veut dans une fonction ici on a une fonction qui additionnent de nombre et qui nous retourne le résultat de cette addition si on appelle la fonction en lui passant deux valeurs pour a et b et bien
par défaut python va signer ses valeurs dans l'ordre c'est à dire que 10 va être assigné à la variable à es5 va être assigné à la variable b cependant il est possible d'indiquer lors de l'appel de la fonction à quels paramètres on veut envoyer nos arguments dans ce cas si on inverse l'envoi en disant que le dise doit être envoyé à la variable b et le 5 à la variable a donc pour résumer on a vu qu'on peut définir un ou plusieurs paramètres dans une fonction donc dans la définition de la fonction ces paramètres ils
deviennent des variables qu'on peut utiliser à l'intérieur de la fonction on peut définir des valeurs par défaut pour ces paramètres pour pouvoir utiliser une fonction sans avoir besoin d'envoyer des valeurs si on le décide et on peut spécifier explicitement à quels paramètres on envoie une valeur lors de l'appel de la fonction dans cette vidéo je vais vous apporter quelques précisions sur la façon dont pitt on va garder vos fonctions en mémoire est ce que ça peu impliqué au niveau de l'agencement de votre code et des erreurs potentielles qui peuvent en découler donc imaginons que je
crée une fonction un peu plus bas dans mon script ici qui s'appelle test et qui va tout simplement afficher la chaîne de caractères bonjour cette fonction imaginons que j'essaye de l'appeler au début de mon script si je sauvegarde et que je lance le script vous allez voir que là on a une erreur de type name erreurs qui nous indique que le nom test n'est pas défini donc là c'est normal puisque python va lire notre script ligne par ligne il va donc déjà essayé d'exécuter cette fonction test mais à ce moment là à la ligne 3
cette fonction n'existe pas donc on a cette erreur naïm erreurs qui nous dit que ce nom n'est pas reconnue et qu'il ne peut donc pas l'exécuter et c'est uniquement par la suite qu'on définit cette fonction et que python sait donc à quoi correspond le nom test donc là dans ce cas ci il faudrait que je met ma fonction au tout début de mon script pour pouvoir ensuite la plaie donc si je sauvegarde et que je relance le script cette fois ci ça fonctionne et on a bien bonjour qui est affiché maintenant je vais vous montrer
un exemple un peu plus avancée qui va peut-être vous surprendre imaginons que dans cette fonction test je n'affiche pas directement bonjour mais j'appelle une autre fonction une fonction qui va s'appeler par exemple affiche bonjour donc je peux très bien appeler une fonction à l'intérieur d'une autre fonction il n'y a aucun souci pour ça mais cette fonction je vais la définir après donc je vais faire la fonction affiche bonjour et dans cette fonction je vais remettre mon print bonjour donc là on pourrait penser que ça ne va pas fonctionner parce que au moment où on arrive
à la ligne 4 ici donc puisque python exécute notre script ligne par ligne on a un nom qui n'est pas encore défini tout comme on venait de le voir avec l'exemple précédent et la fonction test donc là on pourrait penser que python va arriver sur cette ligne il va se dire affiche bonjour je ne sais pas ce que c'est et nous retourner donc une erreur de type name erreur donc là je vais vous montrer ce que ça donne si je lance le script on a quand même bon jour qui est affiché et on n'a aucune
erreur alors pourquoi et bien tout simplement parce qu'il faut comprendre ici que python ne va pas exécuter cette ligne quand on arrive à la définition d'une fonction python va définir ce que la fonction doit faire il va stocker ça dans sa mémoire mais il ne va pas exécuter la fonction c'est uniquement ici à la ligne d'eau douce qu'on exécute notre fonction de tests en l'appelant avec les parenthèses donc au moment où on appelle notre fonction à la ligne de 12 pour exécuter le contenu de la fonction donc la fonction affiche bonjour et bien cette fonction
elle est définie puisqu'on l'a défini à la ligne 8 donc quand on l'appelle à la ligne de 12 via la fonction test elle est dans la mémoire de python donc c'est vraiment ça qu'il faut retenir dans cette vidéo vous voyez que l'ordre dans lequel on écrit les choses a une importance mais il ne faut pas penser que python va exécuter ce qui est contenu à l'intérieur de nos fonctions à chaque fois qu'on les définit par exemple ici je pourrais très bien afficher une variable qui n'existe pas dans ma fonction est temps que je ne l'appelle
pas donc si j'enlève l'appel de test ici ça ne posera aucun problème donc là vous voyez qu'on a potentiellement une erreur dans notre script mais tant que cette fonction n'est pas exécutée l'erreur ne sera pas affichée donc je lance mon script python va mettre en mémoire ces deux fonctions mais il ne va pas les appeler donc là il met en mémoire ses fonctions il sait que si jamais on appelle test il va appeler affiche bonjour et print et à et que si on appelle affiche bonjour il va print et bonjour ces vraiment tout ce qu'il
sait et il n'a pas encore eu l'occasion de vérifier si ces fonctions marche ou pas par contre là si j'appelle la fonction test cette fois ci je vais me retrouver avec une erreur puisque cette variable a ici n'est pas défini donc si je relance mon script là on se retrouve bien avec une erreur de type néo mirror qui nous indique que à n'est pas défini donc avec cet exemple vous voyez également la différence entre des langages qui vont être compilés et un langage comme python qui est interprétée dans notre cas si on n'appelle pas la
fonction test on a un script qui semble valide mais en fait qui potentiellement pourrait retourner des erreurs alors que dans le cas de langages compilés et bien ce genre d'erreur serait détectée en amont puisque le compilateur serait capable de se rendre compte que cette variable n'existe pas alors que dans ce cas ci avec python tant qu'on n'a pas exécuté la fonction de python ne peut pas savoir si l'objet existe ou non donc voilà pour cette petite précision sur les fonctions généralement je vous conseillerais donc de toujours définir vos fonctions au début du fichier pour ne
pas avoir ce genre de problème comme ça vous pouvez appeler toutes les fonctions à la fin de votre fichier et vous pouvez être assurés ainsi de ne pas utiliser une fonction qui n'est pas encore défini dans la mémoire de python une chose fondamentale qu'il faut savoir avec les fonctions c'est que les variables qui sont définies à l'intérieur d'une fonction appartiennent uniquement à la fonction donc ici on a une fonction dans laquelle on assigne la valeur 10 à la variable à et en dehors de la fonction on assigne une autre valeur à la variable a donc
ici le nombre 5 6 par la suite on appelle la fonction est compris la valeur de ah vous voyez que la valeur n'a pas changé malgré l'assignation que l'on fait dans la fonction donc à est toujours égale à 5 et on ne l'a pas modifié la notion qu'on aborde ici c'est la notion d' espaces par défaut quand on écrit une ligne dans notre script on dit qu'on est dans l'espace global l'espace global ici ça correspond donc à la fonction exemple et à la variable à ça veut dire que dans l'espace globale du script on peut
faire un print de la variable à ou appeler la fonction exemple et on n'aura pas d'erreur python ne va pas nous dire que cette variable n'est pas défini ensuite à l'intérieur de la fonction exemple on crée un autre espace qui cette fois-ci et locales à la fonction donc on parle d' espace local les variables que l'on créé à l'intérieur de cet espace elles ne sont accessibles qu'à l'intérieur de la fonction donc à l'intérieur de cet espace local ça signifie donc qu'à l'intérieur de la fonction exemple on peut sans problème print est la variable b et
ça va afficher le nombre 5 par contre si on essaye de faire un print b en dehors de la fonction exemple là on va avoir une erreur car b n'existe qu'à l'intérieur de la fonction en dehors de la fonction b n'est pas défini linverse par contre est possible c'est à dire qu'une variable qui est défini dans l'espace globale et bien elle est accessible à l'intérieur d'une fonction donc à l'intérieur de la fonction exemple je peux accéder à la variable a même si elle est définie à l'extérieur de cette même fonction et j'aurais bien donc la
valeur 5 qui va être affichées alors attention cependant si l'on reprend l'exemple qu'on avait au début si on assigne une valeur à la variable à à l'intérieur de la fonction on n'écrase pas la variable global on fait juste créer une variable locales qui se retrouve à avoir le même nom que la variable dans l'espace globale bien sûr mais au final il s'agit bien de deux variables différentes donc une variable locales à la fonction est une variable globale au script donc pour résumer on a vu que les variables défini à l'intérieur d'une fonction elles ne sont
pas disponibles en dehors de la fonction on peut accéder cependant à une variable global dont qui est défini à l'extérieur de la fonction à l'intérieur des fonctions on a toujours un espace global donc ça c'est obligé puisque dès qu'on écrit une ligne de code elle est obligatoirement dans l'espace global mais on peut par la suite créé plusieurs espaces locaux donc si on crée par exemple plusieurs fonctions elles vont chacune avoir leur espace local alors dans cette vidéo accrochez-vous on va faire un peu d'introspection avec deux fonctions les fonctions globs et look rose qui vont nous
permettre d'afficher à n'importe quel endroit l'espace globale et l'espace le calme donc ses fonctions a le vent en fait nous retourner tout simplement un objet de type dictionnaire qui va avoir d'un côté le nom des objets et de l'autre côté leur valeur donc je vais vous montrer ce que ça donne avec et globaux 11 je vais faire un print de globe rose au niveau de mon espace global donc directement dans le script ici et si je lance le script vous voyez qu'on a donc un dictionnaire avec beaucoup d'éléments puisque de base dans l'espace global ya
pas mal de choses qui sont définies on a par exemple cette variable spécial name qui est égale à la chaîne de caractères mind avec deux tirs et du bas au début et à la fin quand on exécute directement notre script on a cette variable file qui nous permet de récupérer le chemin complet vers le script et d'autres choses du genre comme les bills teens on retrouve également ce que l'on a défini dans l'espace globale de notre script donc notre fonction fou qui est bien défini donc ça c'est le nom de la fonction et on a
associé à cenon la fonction elle même et on retrouve de la même façon notre variable à et la valeur associée donc 5 qui est associé à cette variable ah si on fait un print de locals dans notre espace global ça va être la même chose puisque l'espace global ici à ce niveau-là à la ligne 6 et bien en fait on est dans l'espace globale donc dans ce cas-ci locals et globals ça va être pareil si je lance le script de nouveau vous voyez qu'on a le même dictionnaire et je peux même faire une égalité comme
ceux ci et vous allez voir que quand on fait un print donc de l'eau cause et de globals à l'intérieur de l'espace globale et bien c'est exactement la même chose donc là on a bien de chou qui est retourné donc ça c'est normal puisque on est dans l'espace globale donc dans l'espace global l'espace local c'est l'espace global par contre si je viens maintenant dans ma fonction donc la fonction fou ici et que je fais un print de lock holmes là on va retrouver uniquement ce qui est défini dans l'espace local de la fonction dans ce
cas ci uniquement la variable b donc si je lance le script là vous voyez qu'on a un dictionnaire beaucoup plus restreint qui contient le nom de la variable b et la valeur associée 5 donc ça ça représente tout ce qui est disponible uniquement à l'intérieur de cette fonction si je fais un print 2b en dehors de ma fonction dans l'espace global vous voyez que là j'ai bien visual studio code qui me surligne cette variable puisque cette variable n est accessible que dans l'espace local de ma fonction ici donc la fonction fou si par contre dans
ma fonction je fais un print de globals cette fois ci on va retrouver les variables de l'espace globale donc on va retrouver le name le file notre fonction fouet également la variable à que l'on a défini en dehors de notre fonction donc ce qu'il faut bien comprendre c'est que python en fait il va fonctionner déjà en local et ensuite en global si je fais un print de b il va regarder dans les variables locales 6b existe et si c'est le cas et bien il va utiliser la valeur associée à cette variable s'il ne trouve pas
cette variable b dans l'espace local il va aller chercher dans l'espace global donc c'est pour ça que dans notre fonction ici on peut accéder à des variables qui sont définies dans l'espace global si je fais un print de aïssi pitt on va déjà regardé dans l'espace le cas donc il va regarder dans locals ici donc dans cette variable qu'on avait affiché qui nous avait retourné uniquement b donc il va regarder déjà en local il va se rendre compte que dans son dictionnaire locale il n'a pas de variables qui s'appelle a donc ce qu'il va faire
c'est regarder dans globals s'il a quelque chose qui s'appelle a hélas c'est bien le cas puisqu'on a bien acquis est égal à 5 et donc dans ce cas ci on n'aura pas d'erreurs et on va bien afficher la valeur associée à la variable a donc voilà pour cette petite explication je trouve ça assez intéressant de pouvoir utiliser ces deux fonctions locals et globaux quand vous n'êtes pas trop sûr de ce que vous avez définies à l'intérieur de vos différents espaces c'est également très important de comprendre en fait comment fonctionne python on peut passer des heures
à vous expliquer les espaces la portée des variables etc mais finalement si vous comprenez bien ce que fait python c'est vraiment assez bête vous voyez que là on a un espace local un espace global et python va déjà regardé dans l'espace local s'il trouve quelque chose tant mieux ils l'affichent s'il ne le trouve pas il va voir dans l'espace globale s'ils le trouvent dans l'espace globale ils l'affichent et s'il n'y ni dans l'espace local ni dans l'espace globale et bien on obtient une erreur si je fais un print de ces par exemple ici je vais
avoir une erreur puisqu'il va regarder dans l'espace local c'est n'existe pas il va regarder dans l'espace global c'est n'existe pas non plus et donc on aura une erreur pareille si je me mets en dehors ici si je fais une variable c'est qui est égale à 10 dans ma fonction et que là je fais un print de ces put on va regarder dans l'espace local donc dans ce cas ci à ce niveau à la ligne 7 l'espace local c'est les global donc il va regarder dans l'espace local dans l'espace lequel qu'est-ce qu'on avait défini on à
la variable à la fonction fou et toutes les variables spéciales comme name ou file mais il n'y a pas de variables c'est donc il ne va pas pouvoir aller chercher dans l'espace local d'une fonction il aura juste accès à l'espace local et ensuite l'espace globale qui dans ce cas ci à ce niveau du script est le même donc voilà pour cette vidéo n'hésitez pas à re voir cette vidéo une deuxième fois il ya beaucoup de choses qui ont été abordés essayez de votre côté également créé des variables essayer de les afficher il faut vraiment vous
habituer à manipuler ses différents espaces et à comprendre ce que python vous permet de faire donc que ce soit dans l'espace local d'une fonction ou l'espace globale de votre script dans cette vidéo je vais vous parler d'une instruction l'instruction globale que je vous déconseille très fortement d'utiliser c'est quelque chose que je vois beaucoup dans le code des débutants c'est une instruction qu on a tendance à utiliser quand notre code n'est pas bien construit donc je vais vous montrer avec un exemple ici on a une fonction qui s'appelle gâte coment à laquelle on passe une note
et en fonction de la note on modifie cette variable commentaire donc vous voyez ici que j'ai créé une variable commentaires en dehors de ma fonction qui a une valeur par défaut donc par défaut on va dire que tu as tout faux ensuite on appelle cette fonction avec une note et l'espoir qu'on a c'est de modifier donc le commentaire en fonction de la note donc si la note est plus grande que 15 on dit bravo si elle est plus grande que disent peu mieux faire et si finalement elle est plus grande que 5 on dit attention
donc ça c'est quelque chose que quelqu'un de débutants pourrait faire mais vous allez voir que ça ne fonctionne pas comme prévu si j'exécute le script et que je fais un print de commentaires après l'appel de ma fonction vous allez voir qu'on se retrouve avec tu as tout faux pourtant on a envoyé la note de 20 donc on devrait tomber dans cette condition et modifier la valeur de commentaires pour m bravo en effet on peut accéder à une variable qui est défini en dehors de la fonction à l'intérieur d'une fonction donc on devrait pouvoir la modifier
mais là ce n'est pas le cas on a encore tu as tout faux qui est affiché pourtant on est rentré dans cette structure conditionnelle et on devrait donc avoir modifié cette variable le problème c'est qu'ici en fait quitte on va créer une variable locales à votre fonction donc là on va créer une variable commentaires qui n'existe que dans votre fonction et on ne va pas toucher à la variable qui est en dehors de votre fonction et c'est là que l'instruction globale peut être vue comme une solution qui est vous allez le voir très mauvaise mais
c'est possible et donc c'est pour ça que je vous dis qu'il faut vraiment faire attention et ne pas tomber là dedans et on va voir comment on peut modifier notre script pour avoir des fonctions qu'on appelle pur c'est-à-dire des fonctions qui ne vont pas commencer à manipuler des variables qui sont définies en dehors de la portée de la fonction donc je vais vous montrer déjà ce qu'il ne faut pas faire donc si on met le global ici commentaire en fait on va indiquer à la fonction que dans ce cas si on ne veut pas créer
une variable local commentaires l'on veut utiliser notre variables globales et réassigner dans cette variable ce qu'on va mettre ici donc par exemple le bravo peut mieux faire ou attention donc si je sauvegarde et que je râle ans le script cette fois ci on a bien bravo qui est affiché donc vous voyez qu'en rajoutant cette instruction ou lundi capitons qu'on veut utiliser la variable globale et on peut ainsi la modifier et on se retrouve donc avec une fonction qui marche mais qui est un pur donc un pur dans le sens où on va avoir une fonction
qui modifient des variables en dehors de la fonction donc comment est-ce qu'on peut modifier cette fonction pour avoir une fonction qui reste pure et ne pas utiliser cette instruction globale et bien tout simplement on ne va pas définir deux valeurs par défaut en dehors de notre fonction donc on va enlever ça ici et à la place on va rajouter un hells dans notre fonction qu'on va faire health et on va dire que si on n'a pas ces cas de figure ici donc si la note n'est pas supérieur à 15 à 10 soit 5 eh bien
on va dire tu as tout faux donc ça c'est dans le cas où on a une note qui est inférieur à 5 on va dire tu as tout faux est ce qu'on va faire c'est retourner avec l'instruction written notre commentaire donc là ce qu'on fait c'est qu'on fait juste créer une variable local commentaires à l'intérieur de notre fonction et une fois qu'on a déterminé en fonction de notre structure conditionnelle ici quelle valeur doit prendre cette variable on va retourner la valeur de cette variable donc là on retourne commentaire donc on va retourner en fait une
des chaînes de caractères définit ici est ce qu'il faut faire et bien c'est la récupérer en dehors de la fonction donc là on fait une variable commentaires qui cette fois ci va être différente de cette variable qui est défini dans l'espace local donc on crée une variable dans l'espace globale de notre script qui va être égal à la valeur qu'on a défini ici dans notre fonction est donc là on pourrait l'appeler n'importe comment cette variable on pourrait l'appeler c est ça marcherait de la même façon il faut vraiment voir qu'on a tout simplement une variable
qui est propre à la fonction ensuite on retourne la valeur de cette variable et on la récupère dans une autre variable qui peut s'appeler n'importe comment dans l'espace global ce qu'on pourrait faire également pour simplifier encore plus cette fonction c'est directement retourner sans même avoir besoin de créer deux variables donc retourné la chaîne de caractères directement du clan pourra mettre des written à chaque fois puisqu'on n'a pas vraiment besoin de créer une variable qui ne sert pas à grand chose dans ce cas ci puisque on fait juste retourner par la suite la valeur de cette
variable donc on peut directement m dayton est récupérée en fonction de la note que l'on envoie la chaîne de caractères correspondante et récupérer donc cette chaîne de caractères dans une variable dans l'espace global donc là si je sauvegarde et que je relance le script on a bien bravo si on envoie 20 si j'envoie 0 on va voir tu as tout faux et si je l'envoie par exemple 7 on va se retrouver avec le cas de figure dans lequel on est ici donc avec le l if not plus grand que cinq et on va retourner attention
donc voilà comment modifier la fonction pour avoir une fonction pur une fonction qui n'utilisent pas cette instruction global vraiment je vous dis ça fait presque dix ans que je programme avec python et je n'ai jamais mais vraiment jamais eu besoin d'utiliser cette instruction global donc dès que vous commencez à partir là dedans à vous dire que vous allez solutionner votre code en mettant l'instruction global généralement arrêtez vous posez vous penser à comment vous avez conçu votre cote puisque généralement utilisés globale ça signifie plutôt que notre code et mal pensée donc ce n'est vraiment pas la
solution à privilégier il faut plutôt modifier votre code pour avoir des fonctions qui ne commence pas à modifier des valeurs en dehors de la fonction ça peut créer ce qu'on appelle des effets de bord et ça peut devenir très difficile à débugger en cas de problème donc voilà pour cette petite parenthèse sur l'instruction global forcément c'est le genre de choses que vous allez apprendre sur le long terme vous ne pouvez pas du premier coup savoir comment créer des fonctions qui vont être parfaite ne vous en faites pas au début il se peut que vous soyez
un petit peu mélangé avec tout ça et que vous soyez tenté d'utiliser global moi vraiment je vous préviens essayer de penser à comment vous pouvez modifier votre fonction et vous allez voir qu'à terme avec la pratique vous n'aurait même plus besoin de penser à tout ça et vous allez dès le départ créer des fonctions qui sont ce qu'on appelle pur dans cette partie on va voir ce qu'on appelle le passage par référence donc l'idée en fait que quand on passe une valeur à une fonction on va passer une référence à l'objet alors je vais vous
expliquer tout ça accrochez vous ça peut être un petit peu déroutant au début mais c'est une notion fondamentale à comprendre parce que ça peut vraiment vous jouer des tours donc là j'ai une fonction que j'ai appelé fou tout simplement qui contient un paramètre à l'intérieur de cette fonction j'affiche le idée donc l'identifiant de cette variable qui est défini donc dans l'espace local de ma fonction en dehors de ma fonction dans l'espace global j'ai une variable var qui est égal à 5 j'affiche l'identifiant de cette variable et ensuite j'appelle ma fonction fou en passant cette variable
ici donc var ah non paramètres donc là on va afficher l'identifiant de parham et l'identifiant de vars si j'exécute le script vous voyez qu'on a le même identifiant donc c'est ce que je voulais dire au début de cette vidéo en parlant de passage par référence vous voyez ici que par ham en fêtes et var vont référence et le même objet dans ce cas ci le nombre 5 en mémoire donc on a deux variables différentes une variable dans l'espace local de la fonction est une variable dans l'espace global mais c'est variable elle référence le même objet
alors dans ce cas ci avec un objet de type immuable donc un nombre entier ça ne pose pas trop de problème puisqu'on ne peut pas modifier cet objet donc si dans ma fonction ici je dis que par am est égal à 10 on veut en fait créé un nouvel objet donc une nouvelle variable par am qui va être égale à 10 et on ne va pas toucher notre variable dans l'espace global puisqu'on ne peut pas modifier un objet de type nombre entier si on fait une affectation d'une nouvelle valeur on va créer un nouveau nom
avec un nouvel objet en mémoire donc dans ce cas ci si je fais après l'exécution de ma fonction un print de vars on va bien avoir toujours la valeur de 5 donc même si au départ vous voyez qu'on avait le même objet donc var et par am qui pointaient vers le même objet en mémoire là on a créé un nouvel objet et on n'a pas touché à l'objet var dans l'espace global de mon script maintenant c'est un petit peu différent avec des objets mu abl donc par exemple si je mets une liste ici et c'est
là que ça peut commencer à vous jouer des tours si je crée une variable qui s'appelle var et qui est égale à une liste et qu'à l'intérieur de ma fonction ici je fais par un point happened et que j'ajoute un je vais juste exécuter le code pour vous montrer ce que ça donne on voit que quand on fait un print de vars après l'exécution de la fonction cette fois-ci var a bien été modifié donc pourquoi eh bien on va tout simplement refaire un print deux idées de par âme et un print deux idées de vars
donc on va se retrouver là encore avec le même identifiant qui signifie bien que quand on passe notre variable ici à notre fonction eh bien on se retrouve ici à l'intérieur de la fonction avec le même objet donc on a bien varié par am qui pointe vers la même liste en mémoire donc forcément comme modifie par la suite dans notre fonction cette liste on va modifier cet objet et nos variable va réparable vont pointer vers ce même objet donc on a deux noms différents bars et par am qui pointe vers le même objet en mémoire
donc si on modifie cet objet dans notre fonction logiquement quand on revient dans notre espace global et qu'on affiche notre variable qui pointe toujours vers ce même objet qu'on a modifié et bien cet objet sera également modifié donc vous voyez que dans certains cas ça ne pose pas de problème quand on est en présence d'un objet immuable et bien forcément ne peut pas modifier cet objet donc on aura pas de conflit par contre quand on a un objet qui est de type minable qu'on peut modifier et bien là vous voyez qu'il faut vraiment avoir en
tête cette notion qu'on passe en fait une référence à notre objet et que donc on peut se retrouver à avoir deux variables qui pointe vers le même objet et que si on modifie notre objet dans la fonction et bien on va également le modifier en dehors de la fonction alors pour ne pas avoir ce problème qu'est ce qu'on pourrait faire eh bien on pourrait tout simplement créer une nouvelle variable qui est une liste vide ici et ensuite on va modifier donc cette liste mais là comme on a créé un nouvel objet on ne va pas
toucher à l'objet qui est en dehors de notre fonction si j'aurais exécute le script vous voyez que cette fois ci notre variable à l'extérieur de la fonction n'a pas été modifié on peut également faire une copie de la liste puisque là si je mets un deux et trois et que je veux ajouter quatre dans cette fonction et bien si j'exécute le code là on aura uniquement le nombre 4 puisqu'on a défini une liste vide donc ce que je peux faire c'est créer une copie en faisant part à mme point copie donc je fais une copie
de cette liste là je vais l'appeler autrement juste pour bien vous montrer que c'est un objet différent donc on va l'appeler test par exemple et on va print et est donc là ce que je fais c'est que je déclare une variable qui est égal à 1 3 on passe ensuite la référence de cet objet à notre fonction plus particulièrement à ce paramètre parham ensuite par un missile qu'est ce que je fais et bien je fais une copie de cette liste dans une nouvelle variable donc on copie la liste et on aura donc un objet différent
qui va avoir exactement les mêmes valeurs que l'objet de base donc dans ce cas-ci 1 2 3 ensuite on modifie test on lui ajoute 4 on affiche test est donc là si je sauvegarde et que je relance le script on a bien un deux trois quatre dans la fonction et en dehors de la fonction on a bien un 2 3 donc on n'a pas modifié notre variable en dehors de la fonction puisqu'on a fait une copie de cet objet qu'on a mis dans une nouvelle variable et donc on n'a pas touché à l'objet d'origine donc
voilà pour ces précisions on est dans des concepts un petit peu plus avancés ici n'hésitez pas à re voir cette vidéo c'est quand même très important de bien comprendre tout ça ici en fait on revient à cette notion de python qu'on a d'un côté des objets de l'autre côté on a des noms et on peut avoir plusieurs noms qui pointe vers le même objet est donc logiquement quand on modifie cet objet unique en mémoire on peut se retrouver avec différentes variables qui vont être modifiés donc il faut vraiment bien comprendre cette notion d'objet et donnons
donc c'est très important de comprendre ces notions et de voir à quel point ça peut nous affecter si on les manipule pas de la bonne façon avec cette notion également d'objets mu à bhl et immuable donc forcément là encore quand vous êtes avec un objet immuable vous êtes en quelque sorte protéger car vous n'allez pas pouvoir le modifier mais quand on est avec un objet mu à bhl il y à un risque si vous ne maîtrisez pas et si vous ne comprenez pas ce que vous faites que vous modifiez un seul et même objet qui
est référencée par différents noms à l'intérieur de votre script donc voilà qui termine cette vidéo sur les fonctions on a vu qu est ce qui était une fonction comment retourner une valeur à l'intérieur d'une fonction on a vu également les paramètres et les arguments on a vu comment on pouvait définir les fonctions à différents endroits dans notre script et l'impact que cela peut avoir sur l'exécution de notre code on a vu la notion d' espaces avec l'espace globale et l'espace local et comment manipuler et afficher ses différents espaces avec les fonctions locals et globaux ce
qui nous permettent de faire de l'introspection pour vérifier qu'elles variables sont disponibles à quel endroit de notre script on a vu également la fameuse instruction global qui est très souvent utilisé par les débutants et pourtant à proscrire car elle est le résultat bien souvent un script qui est mal conçu on a vu pour finir la notion de passage à part référence avec cette notion d'objet mu à bhl est immuable est ce que cela peut avoir comme impact sur vos scripts avec des objets qui peuvent être modifiées à l'intérieur d'un espace local comme l'espace de votre
fonction et avoir ainsi des répercussions et des effets de bord sur des variables en dehors de votre fonction dans l'espace globale de votre script donc voilà pour cette vidéo sur les fonctions j'espère que ça vous permet de bien comprendre le fonctionnement de cette notion fondamentale en programmation et comment éviter tous les problèmes qui peuvent arriver quand on ne comprend pas ce que l'on fait donc je suis allé un peu plus dans le détail que ce que vous trouvez généralement dans des vidéos sur les fonctions mais au moins j'espère qu'avec ça vous aurez toutes les armes
pour créer des fonctions qu'ils soient les plus professionnel possible si cette vidéo tu as plus n'hésite pas bien sûr à mettre 1 pouces bleus at abonnés à la chaîne si ce n'est pas déjà fait et bien sûr à activer la cloche pour ne rater aucune des prochaines vidéos sur la chaîne
Copyright © 2025. Made with ♥ in London by YTScribe.com