Django, récursivité et maîtrise de *args
Session du 07 janvier 2022 à 18h00
Bases du Langage
Développement Web & Frameworks
Veille & Discussions
Deviens membre Premium
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- +100h de formations
- +180 exercices de code
- +100h de mentorats en rediffusion
- 20 projets
- Mentorats groupés hebdomadaires
- Support individuel avec nos mentors
Django, récursivité et maîtrise de *args
Dans cette session, on discute un peu de l'intérêt du framework Django par rapport à d'autres solutions existantes (en Python ou autres).
On parle aussi de la récursivité et de son importance (ou non) en Python.
Et on termine sur une explication des args et kwargs.
00:00:00 :Voilà donc là normalement vous devez avoir le partage d'écran en plus, non je ne suis passûr, non ok ça c'est juste pour l'enregistrement ok, je suis encore en train de, normalement ondevrait plus bouger d'outil, whereby là ça a l'air bien, ça a l'air de bien fonctionner donc on va
00:00:16 :rester là dessus, au début on avait testé Lifestorm et d'autres trucs et ça ne marchait pas super,mais là normalement on va rester là dessus. Donc oui je ne sais pas s'il y avait des questions que
00:00:28 :ce soit sur Docstring, sur les liens, sur comment accéder à tout ça avant que je vous montre unpeu le côté récursivité. Tu vas mettre quand en ligne la nouvelle sur le site web? Normalement
00:00:43 :lundi, là je termine de faire le montage et d'uploader les derniers, il manque une partiesur les tests unitaires, donc en fait il y a les tests unitaires, il y a cinq ou six vidéosqu'il faut encore que je monte et après normalement lundi si je termine, après je pourrais peut-être
00:01:04 :vous la mettre sans forcément faire l'annonce pour tout le monde, je pourrais vous mettre unlien parce que les vidéos sont déjà là, donc même si c'est pas tout fini je pourrais vous mettre lelien, il y a presque je crois que je dis 10 heures parce que j'avais 10 heures en montage donc avec
00:01:19 :les parties coupées il doit rester 8 heures à peu près, donc je vous mettrai ça même s'il n'y apas la fin je vous mettrai ce qu'il faut lundi. J'ai pas entendu, il s'agit de quelle formation?
00:01:30 :Alors c'est une grosse formation Django en fait, une formation Django e-commerce en fait, c'est unprojet de site e-commerce qui va continuer d'évoluer, j'ai à peu près 8 heures justementsur toute la partie back-end, j'ai prévu, en fait je voulais faire un projet qui soitle plus complet possible parce que c'est toujours un peu ça les problèmes, c'est que comme c'est
00:01:59 :actuellement le cas dans la formation, alors dans la formation Django je vais quand même jusqu'à lamise en ligne mais juste avec un cas de figure donc sur Python Anywhere qui est un service pourhéberger, donc je pars quand même, je vais quand même jusqu'à l'hébergement en ligne mais ça
00:02:13 :reste assez basique et il y a plein de choses encore qui restent abordées sur la partie hébergement,et donc là l'idée avec le projet e-commerce c'est vraiment là dans ce qui est déjà disponible parexemple l'intégration avec Stripe, donc tu vois c'est un truc que souvent on dit bon bah le côté
00:02:30 :Stripe, le côté intégration c'est un truc spécifique et puis on n'aborde pas, bah là toutce côté là où il y a des webbooks, il y a des trucs avec une technologie précise à intégrer,j'ai décidé de le faire même si je pense que ça vieillira pas très bien, je renvoie souvent
00:02:44 :vers la documentation justement parce que je montre que c'est typiquement le genre de choses,salut c'est Guillaume je crois, ouais salut Guillaume, donc je crois que c'est vraiment legenre de choses où c'est important d'aller fouiller la doc parce que moi je montre commenton met en place etc avec Stripe dans ce projet là, mais c'est vraiment le genre de projet dans
00:03:10 :lequel il faut un moment se débrouiller tout seul et il faut comprendre comment les chosesmarchent parce que c'est des docs, même justement quand j'ai refait en fait, je me suis rendu compteen faisant le tuto que la doc avait vachement évolué et qu'en fait moi ce que j'avais mis
00:03:24 :en place sur Dockstring qui marche toujours parce que j'ai pas changé de version et tout, c'étaitbeaucoup plus compliqué et ça fait même pas deux ans, même pas là en plus la version avecabonnement ça faisait un an, donc tout ce que j'avais mis en place avec Stripe sur Dockstring,
00:03:36 :j'avais dû faire du javascript justement sur Dockstring pour intégrer Stripe et maintenantil n'y a même plus besoin de javascript, tout se passe du côté back-end et donc voilà j'ai pumettre à jour en faisant le tuto la partie Dockstring qui est maintenant plus simple.
00:03:52 :Et donc voilà donc je suis sûr que je vais vous, là je pense que à moins que ça ait déjà changéentre j'ai enregistré en fin novembre, donc je pense pas que c'est changé depuis que je l'aienregistré mais si ça se trouve ça a peut-être déjà changé, la partie Stripe en tout cas, donc
00:04:08 :donc à voir si je la refais à chaque fois mais bon l'idée c'est comme je vous ai dit,j'ai vraiment, je vais dans la doc à chaque fois pour vous montrer comment après vous débrouillezpar vous même. Et pour l'instant il n'y a pas la partie front, donc là vous voyez on a déjà 8 heures,
00:04:23 :je pense que c'est une approche que j'ai choisie en fait de vraiment rester à 100% sur le back pourl'instant et de pas commencer à mélanger du front et du back parce que c'est souvent ça aussi qu'onvoit un peu, ça a le désavantage de pas être très sexy parce que vous allez voir là sur 8 heures de
00:04:41 :formation les boutons ils sont gris, tout est en ligne, il y a zéro CSS, le HTML c'est ultra simple,c'est juste un H1 et puis des trucs comme ça, donc c'est vraiment très très simple mais au moinsça permet de montrer vraiment toute la logique sans commencer à s'embêter avec des fichiers CSS
00:05:01 :et avec tout le côté front. Donc ça ça arrive, je vous verrai, je vais faire la vidéo, c'est ledernier truc qui m'a manqué à faire, la vidéo de présentation du projet et donc normalement çaarrive, c'est ça la semaine prochaine. Voilà donc je sais pas s'il y avait d'autres questions sur ce
00:05:16 :projet, je veux juste préciser avant, si vous entendez un chien qui se met à aboyer d'un coup,c'est normal, c'est mon ami qui rentre et le chien va devenir tout fou, donc si un chien qu'un boitdans à peu près 20 minutes c'est normal. Donc oui je sais pas s'il y avait des questions sur ce
00:05:33 :projet et si ça répondait à ta question Vincent, je me suis un peu étendu sur...Non pas de souci. Donc ouais je sais pas si il y avait des questions, comme je disais,
00:05:45 :il y en a qui sont arrivées en cours de route, des questions sur Doctrine sur la plateforme oudes questions en général sur Python et sinon on va regarder les quelques petits exemples quej'ai préparés sur la récursivité par rapport à la question de Yacine. J'aurais une petite question
00:06:01 :si possible. Ouais bien sûr. Pourquoi est-ce qu'on ferait un site qui commerce en Django avectoute une architecture qu'on a intégré nous-mêmes alors qu'il y a des sites comme Shopify,KBDist qui sont quand même très simples et surtout pour la plupart des clients soft trèsspécialisés ou vraiment des demandes très spécifiques ce sera largement suffisant et
00:06:22 :ils n'en utiliseront que 20% du potentiel. Alors c'est un peu la même question je te dirais queje m'étais posé pour Doctrine et on rentre dans effectivement des considérations qu'il fautprendre en compte. Moi je te dirais si on parle d'un point de vue entrepreneurial, tu vois,
00:06:40 :si c'est un projet que tu veux lancer ou si c'est pour un client, effectivement je conseilleraisd'abord de partir sur des solutions existantes et dans mon cas par exemple c'est ce que j'avais faitavec mes formations tu vois j'ai commencé sur Udemy et c'est juste après un moment que je me suis
00:06:55 :dit voilà il y a des limites avec Udemy, je peux pas faire ce que je veux et que tu as envie d'avoirfinalement 90% de ce que j'ai fait sur Doctrine c'est exactement ce qu'il y a sur Udemy ou surPodia ou sur d'autres plateformes et après tu vas pouvoir aller ajouter le petit 10% qui te
00:07:11 :permet de te différencier et de t'amuser quoi. Et donc sur un projet e-commerce ça serait un peula même chose, c'est que tu vas pouvoir aussi après du côté gestion, c'est peut-être plus ça je tedirais, sur le côté front effectivement un Shopify ça suffirait, c'est que tu vas pouvoir tu vas
00:07:26 :afficher des articles, le côté paiement tout ça c'est très bien géré par des trucs comme Shopify.Par contre après toute la partie gestion c'est là où on rentre souvent dans les trucs un peuplus personnalisés, tu vois tu vas avoir un quelqu'un je sais pas qui a une boutique avec
00:07:40 :des livraisons de camions des trucs comme ça etc qui va vouloir gérer les choses différemment etlà peut-être que Shopify n'a pas prévu ton cas de figure ou tu as un taux de TVA précis parce quetu es dans tel et là tu peux rentrer dans des trucs où tu vois d'avoir un back-end justement
00:07:53 :et le côté administration qui est précis et qui est spécifique à ton projet qui va être intéressant.D'accord ok voilà merci. Je vais juste, je crois que je suis pas en train de...
00:08:03 :Moi j'avais juste une remarque que vous avez déjà mentionné en fait dans le public, du coup moi j'aifait la formation, enfin bizarre mais je l'ai faite pendant les vacances en gros la formationde Django et je trouve ça ultra frustrant quand tu termines un chapitre, au tout début tu vois
00:08:22 :les chapitres ça s'enchaînait bien les uns après les autres, une vidéo s'est terminée tu vois genrel'autre se déclenchait, après j'avais plus ça donc je sais pas pourquoi j'avais plus le passageautomatique entre deux vidéos par exemple. Ah ouais ok. Et après je trouve ça, à titre personne,
00:08:38 :je trouve ça ultra frustrant si tu veux quand tu termines juste un module, donc c'est nickel,en fait je dois retourner sur la page d'accueil dans le parcours et dans la formation, si tu veuxj'ai pas de lien entre les chapitres, mais c'est vraiment juste au niveau, c'est une navigation tu
00:08:55 :vois, il n'y a rien de tout ça. Ouais ouais mais ça c'est en fait, c'est mon gros projet début 2022,c'est de revoir la façon dont se sont organisés les parcours, parce qu'actuellement vous avezprobablement remarqué du coup les parcours c'est juste une agrégation de toutes les ressources que
00:09:10 :vous avez morcelées sur le site, et donc effectivement ça fait que tu fais des allers-retours tout le tempsentre ton plan de cours et puis finalement les exercices, les quiz, les formations. Et ce que je
00:09:21 :veux faire justement en début 2022, je veux revoir ces parcours pour que ça ressemble plus à ce quetu as actuellement dans les formations où tu as ton plan de cours à gauche et où tu n'es pas tout letemps à revenir sur le plan de cours et à passer de l'un à l'autre et d'avoir une meilleure aperçue
00:09:34 :de tout ce qui te reste à faire aussi, parce que là en fait tu as une formation et la formation tuvois pas tout ce qu'elle contient, faut que tu cliques dessus pour voir que tu as plein de trucs,donc ça effectivement c'est un truc clairement que je vais améliorer. Et pour le passage automatique,
00:09:47 :normalement c'est basé sur du javascript, donc peut-être si tu as vidé ton cache ou des trucscomme ça, ça se peut que ça ait, que la préférence ne se soit pas sauvegardée, ça peut être destrucs comme ça. Après il y a encore des petits bugs effectivement, j'ai aussi pour ceux que ça peut
00:10:05 :intéresser, là je sais pas si vous avez vu l'annonce que j'avais faite, je commence à rajouter lessous titres et puis des résumés aussi textuels et vraiment je vous conseille, je trouve que c'estsous exploité, la recherche de docstring et ça aussi c'est un gros plus de Django, un module de
00:10:22 :recherche que je trouve incroyable, c'est ce qu'on appelle du fuzzy search, donc c'est en faitil arrive à te trouver même si tu fais les typos, je trouve ça c'est incroyable, même si tu tapes unmot un peu mal, il te retrouve ce que tu cherches en fait. Et donc n'hésitez pas vraiment, maintenant
00:10:37 :en plus qu'il y a les vidéos qui sont sous titrées, du coup la recherche peut aller chercher dans lessous titres en plus, donc j'ai commencé à faire des tests, là tu peux vraiment aller trouver destrucs très précis et je vais essayer de sous titrer justement les formations de Django, parce que
00:10:51 :Django c'est le genre de truc où tu as souvent, tu te souviens plus où tu as vu tel truc précis,tu te souviens du nom et tu sais plus dans quelle vidéo, et donc là de tout sous titrer ça, ça vaêtre génial pour pouvoir chercher des trucs très précis dans ces formations. Donc ça arrive
00:11:05 :aussi dans les prochaines semaines prochainement. Donc s'il n'y a pas d'autres questions,est-ce qu'il y a d'autres questions? Sinon on va passer sur la récursivité un petit peu.
00:11:18 :Pas d'autres questions? Ok, alors partage d'écran, entire screen, hop, partagez, donc làvous allez avoir un bel effet de mino, voilà. Donc c'était Yassine qui a posé une question sur la
00:11:37 :récursivité, les fonctions récursives, les fonctions qui s'appellent elles-mêmes. Alorsça il faut savoir déjà que c'est le genre de truc que personnellement moi ça me retourne le cerveauà chaque fois et je sais que dans mon expérience aussi d'enseignement, j'ai vraiment à chaque foiseu cette même réflexion par rapport aux étudiants que je coachais. Il y a vraiment des gens qui
00:12:00 :comprennent tout de suite pour qui c'est super clair et il y a des gens dont je fais partie quiont vraiment du mal avec cette notion de récursivité parce que c'est un truc, je sais pas,c'est comme la programmation en général, il y a des gens qui comprennent la logique tout de suite
00:12:13 :et puis il y a des gens qui voient les choses différemment et donc faut pas avoir peur sivraiment vous, si même après avoir regardé des dizaines de tutos vous avez toujours du mal àaborder la récursivité, c'est normal, je pense qu'on n'a pas tous le cerveau qui fait de la même
00:12:30 :façon là-dessus parce que ça peut être des trucs qui, enfin ce côté récursif je trouve n'est pasforcément toujours évident. Aussi en préambule, c'est effectivement, donc il y a Thierry qui t'avait
00:12:43 :répondu, n'hésitez pas d'ailleurs à me couper pendant que je parle si vous avez des questionsou quoi, n'hésitez pas à prendre la parole. D'ailleurs je crois que j'avais, ah je crois que le
00:12:54 :chien va se mettre à aboyer, ah non, bon le chien n'a pas aboyé ou alors je l'entends pas, non, doncoui n'hésitez pas à prendre la parole, alors je crois que j'avais coupé quelques micros, je saispas si ça se remet tout seul quand je coupe les micros des gens, sinon il y a le chat aussi, vous
00:13:13 :pouvez écrire dans le chat si vous avez des questions que vous voulez poser sans interrompre.Donc oui, Thierry qui avait répondu et je suis assez d'accord avec lui, autant sur lesexemples que sur le fait que personnellement la récursivité c'est vraiment pas un truc quej'utilise très souvent. J'ai deux exemples que j'utilisais qui sont les exemples qu'a donné
00:13:35 :Thierry, c'est les exemples de structures de hiérarchie en fait, donc quand vous avez, moic'était donc à l'époque en 3D, en fait on avait des scènes 3D où il y a beaucoup d'objets dansla scène et il y a des groupes d'objets et des fois en fait on part d'un objet qui est caché dans
00:13:52 :un sous-groupe, donc un peu comme une architecture de fichiers ou de dossiers, et du coup on veutremonter au groupe par an. Donc en fait on va avoir cette notion de récursivité parce que
00:14:02 :on peut faire ça aussi avec des boucles wild, alors c'est souvent ce que vous allez voir, çaarrive qu'on puisse ne pas avoir besoin de faire de récursivité en fait et de le faire avecune boucle wild, et l'idée c'est que tant qu'on n'a pas atteint le niveau le plus haut, et bien on
00:14:16 :va continuer. Donc soit en rappelant la fonction qui nous permet de remonter d'un niveau, soit enfaisant une boucle wild justement en disant tant que tu trouves un par an, tu remontes. Donc ça
00:14:25 :c'est un premier cas de figure et c'est pour ça qu'on a cette notion de récursivité dans tout cequi est hiérarchie, dans tout ce qui est recherche, dans des arbres comme ça. Et on a aussi dans des
00:14:39 :listes souvent, donc c'est un peu la même chose, mais c'est un autre type peut-être de... enfin nonça reste à peu près pareil dans cette notion de hiérarchie, c'est quand on va avoir des listesimbriquées ou des dictionnaires imbriqués, et là de la même façon quand on veut soit descendre ou
00:14:56 :soit monter dans des listes, dans des structures comme ça, ben là on va souvent avoir besoin,parce qu'on sait pas au préalable en fait combien de fois on va devoir rentrer dans une structure,donc on peut pas... la façon un peu bourrin je dirais de le faire, vous pouvez le faire aussi
00:15:08 :comme ça, c'est de faire par exemple une boucle fall et de dire boucle 10 000 fois et puis quandtu trouves plus de par an, ben tu t'arrêtes. On fait un break par exemple et là avec le break
00:15:20 :on va sortir de la boucle fall. Le problème c'est qu'on peut être bourrin comme je dirais en ledisant ben on fait 10 000 fois et si finalement vous avez une structure de données où ça vaà 15 000, ben à un moment finalement vous allez sortir de ce range là, puisque vous auriez prévu
00:15:35 :que 10 000 itérations et finalement dans un cas de figure vous en auriez 15 000. Donc c'est pasvraiment la bonne façon d'aborder les choses, la bonne façon d'aborder les choses c'est avec larécursivité ou une boucle while, dépendamment des cas, en disant ben tant que, et puis le tant que,
00:15:48 :ça peut être 5 fois, ça peut être 15 fois, ça peut être 150 millions de fois, en fonction ducas de figure. Est-ce que ça va jusque là pour ce petit préambule? Oui oui. Donc là j'ai deux,
00:16:03 :et vu que j'ai vu la question, je sais pas quand tu l'as posée Yacine, mais je l'ai vu il y a uneheure ou deux, donc j'ai pas eu le temps de faire énormément d'exemples, mais d'ailleurs je vouspartagerai, j'ai commencé à faire, du coup je vais prendre des notes et tout sur Notion que je
00:16:18 :vous partagerai pour les sessions, en plus de l'enregistrement, comme ça vous aurez le codequ'on voit ensemble si vous voulez le revoir après, et je rajouterai des exemples un peu plusconcrets et complets, parce que là c'est des trucs assez simples qu'on voit dans la plupart destutos, mais le problème c'est que bon, les factoriels c'est pas le genre de choses qu'on
00:16:35 :fait très souvent, et le premier exemple, le countdown aussi c'est un truc assez, c'est assezrare qu'on ait besoin de faire ça. Mais je vous donnerai donc des exemples un peu plus concrets
00:16:45 :de récursivité, qu'on pourrait avoir justement, donc des exemples comme ceux que je vous ai dit.Donc première chose ici, ce qu'il faut comprendre avec la récursivité c'est qu'en fait on va avoir,la première chose à trouver c'est la condition d'arrêt, on appelle ça la condition de base,base condition en anglais, donc comme ceci, c'est la condition en fait dans laquelle vous allez vous
00:17:08 :arrêter, parce que le risque c'est un peu comme avec les boucles wild, c'est d'avoir quelquechose qui ne s'arrête jamais, donc si vous n'avez pas cette condition de base, cette conditiond'arrêt, vous allez tomber dans une erreur que vous allez très certainement voir si vous commencezà faire de la récursivité, c'est si je me souviens bien, max recursion error, c'est voilà, donc le nom
00:17:29 :de l'erreur c'est recursion error, et l'erreur au complet ça va vous dire en gros, par défaut lalimite c'est 1000 je crois, vous pouvez la changer d'ailleurs, et donc en fait c'est au bout de 1000itérations il va s'arrêter, parce qu'il va considérer que justement vous n'aviez pas prévu
00:17:44 :le cas de figure dans lequel vous allez sortir de la récursivité, donc pour pas que votre ordiexplose, Python va arrêter, et donc c'est pour ça que vous pouvez changer cette limite, parce quedes fois ça peut arriver qu'on ait des cas de figure où vous avez besoin d'aller au delà de
00:18:00 :1000 et que c'est normal que ça boucle plus de 1000 fois, donc c'est logique de pouvoir changercette limite, mais par défaut c'est 1000, et donc si vous ne prévoyez pas cette sortie, ou alors sivous avez mal codé cette sortie, parce que des fois c'est ça qui arrive, en fait c'est souvent
00:18:16 :ça même qui arrive, vous avez pensé à cette condition de base, vous l'avez codé, mais vousl'avez mal codé, et du coup en fait un peu comme dans une boucle while, là encore, vous allezjamais tomber sur la condition qui fait que vous sortez de la boucle, et donc à un moment Python
00:18:30 :va dire ok j'arrête, j'arrête là. Donc la première chose à savoir c'est quelle est la condition debase dans laquelle on va arrêter la récursivité. Donc là vous voyez on a un premier exemple qui
00:18:41 :est un exemple de countdown, donc l'idée c'est de lui dire tout simplement de faire un compte,un compteur à zéro, on va dire par exemple countdown de 10, on part de 10, ça va afficher10, 9, 8, 7, 6, comme ça, jusqu'à arriver à zéro. Et j'ai des trucs Discord qui popent dans les
00:19:01 :oreilles, ok c'est juste ça. Donc l'idée c'est ici de savoir quand est-ce qu'on va s'arrêter,dans ce cas-ci c'est assez facile, c'est quand on arrive à zéro. Donc on a tout simplement une
00:19:14 :structure conditionnelle ici, si la valeur de n est égale à zéro, et bien on arrête, on fait unreturn et on va pas plus loin. Sinon qu'est-ce qu'on fait, et c'est là qu'on a le caractère
00:19:24 :récursif, c'est qu'on a notre fonction qui est définie ici, et on appelle la fonction dans lafonction. Donc c'est pour ça que si j'enlève tout ça ici, si j'enlève toutes ces conditions là et
00:19:33 :que je fais juste un countdown, si on fait juste ça on a le cas de figure d'une boucle while,c'est comme si on faisait un while true, on rentre dans un cas de figure où on a une fonction quis'appelle et qui ne s'arrête jamais. Et donc là on rajoute cette condition pour dire que dans le
00:19:52 :cas de figure où on arrive à n égale à zéro, et bien on s'arrête. Et c'est là où je vous disqu'on peut prévoir une condition d'arrêt et ne pas forcément la rencontrer. Imaginez que là vous
00:20:01 :faites un plus 1 finalement, qu'on part du 10 à là, on va passer de 10 à 11 à 12 à 13 et on vajamais tomber sur le cas de figure de zéro. Donc là encore on a un truc qui va continuer à faire
00:20:12 :une récursion sans s'arrêter. Je vais juste vous montrer d'ailleurs l'erreur, je vais sauvegarder,je vais lancer le code, et là vous voyez on a maximum recursion depth exceeded while callinga pittan object. Vous voyez là il dit previous line 990 plus que 992 fois. Donc là on est dans le cas d'un
00:20:31 :truc qui, et si je le relance vous allez voir, donc là on a un compteur en fait en sens inverse,où il est parti de, il n'arrive plus à afficher, donc on part de 10 et là il a continué jusqu'à1005 et après il s'arrêtait. Et d'ailleurs si vous voulez changer la limite, si je ne me trompe
00:20:57 :pas je crois que c'est dans le module 6, recursion set recursion limit, donc là vous voyez si je lemets à 2000 par exemple, et que je fais mon countdown après, là il devrait aller un peu plusloin. Ah non, toujours 996. Ok, et est-ce qu'il va pas, ah si vous voyez là il va quand même, oui ok je
00:21:21 :pense qu'il me dit voilà 996 et plus, donc dans le message il dit à peu près, il n'a pas le compteprécis mais vous voyez que là effectivement on est allé jusqu'à 2000. Donc on peut changer cette
00:21:30 :limite. Donc moi dans ce cas-ci ce qui m'intéresse c'est pas de faire un compte inverse, c'est defaire n-1 et donc de partir de 10 et d'arriver jusqu'à cette condition. Si je relance, cette
00:21:42 :fois-ci on a bien 10, 9, 8, on part de 10 et on va jusqu'à 0 et après on s'arrête. Ca va jusque là?Tout le monde m'entend? Ok super. Donc voilà un premier exemple de fonction recursive,
00:21:57 :comme je vous dis on aurait très bien pu le faire avec une boucle while, on aurait pu dire négal à 10 et while n est plus grand que 0, et bien on fait un print de n et on fait n-1 et c'esttout. Si je me suis pas planté, on lance et normalement voilà c'est pareil. Donc là on a
00:22:18 :dit on est parti de 10 et là il faudrait que je dise plus grand ou égal à 0 si on voulait avoirle 0 en prime. Vous voyez là dans ce cas-ci effectivement on peut faire la même chose
00:22:30 :avec une boucle while ou avec une fonction recursive. Le deuxième exemple qu'on a,ça je vais laisser commenter, c'est la fameuse factorielle. Donc ça c'est l'exemple que j'aime
00:22:40 :pas trop parce que bon déjà ça rentre dans des maths et il y a des gens qui aiment pas les mathsdont je fais partie. Donc factorielle c'est ça, c'est quand on dit factorielle de 3, c'est si je
00:22:49 :me souviens bien, quand on met un point d'exclamation, donc factorielle de n et puissi on met 3 en fait c'est qu'on va aller jusqu'à 1 je crois. Donc on va faire 3 x 2 x 1, si on
00:23:01 :avait factorielle de 4 on ferait 4 x 3 x 2 x 1 etc. Donc là on a ce côté récursif puisque en faitlà encore on va devoir définir une condition de base. Donc quelle est la condition de base? C'est
00:23:14 :n qui est égal à 1 et auquel cas on va s'arrêter. Et sinon qu'est ce qu'on fait? Là vous voyezqu'on a un truc un peu plus, d'ailleurs je crois que j'ai pas besoin de ces parenthèses là,oui. Donc là c'est quoi qu'on fait? Dans ce cas-ci c'est pas juste un countdown avec n-1,
00:23:31 :on va multiplier la valeur actuelle avec la factorielle qu'on relance mais avec cette foisn-1. Donc si on part de 3 on va faire 3 x 2 et puis après on va faire 2 x 1, si on part de 5 on va
00:23:46 :faire 6 x 5, après 5 x 4 etc. Et c'est ce qui fait qu'on va se retrouver avec le 6 x 5 x 4 x 3 etc
00:23:54 :jusqu'à 1. Donc ça c'est vraiment le genre de truc où vous voyez même sur des exemples trèssimples comme ça, moi je vous conseille de faire ça de votre côté, de bien prendre le temps demettre des prints ou de le faire avec le débuggeur, de mettre des points de débug à chaque fois pour
00:24:08 :bien voir les appels de la fonction en fait. Et même après quand même avec des exemples pluscomplexes de vraiment arrêter et voir où ça se passe. Et pour ça je vous conseille Programise
00:24:23 :je crois si je me souviens bien, Recursive, c'est en anglais mais ils ont Python, Recursion,ce que j'aime bien de leur article ici, à terme je le ferai, j'ai prévu de faire un glossaire surla Récursion sur Dockstring, donc vous l'aurez en français un peu de la même façon. Ce que
00:24:45 :j'aime bien avec ça c'est que justement ils ont des bons petits graphiques qui font en fait ce côtédébug, donc qui vous montre bien justement qu'au début on a factoriel de 3, après on a justement3 x factoriel de 3-1 donc 2, après 3 x 2 x factoriel de 2-1 donc 1 etc. Donc on se retrouve
00:25:05 :bien avec 3 x 2 x 1 qui est égal à 6. Et là vous voyez tous les appels comme ça, donc c'est là oùlimite aussi il ne faut pas hésiter à prendre un papier et un crayon et faire ça, de faire despetits croquis, des petits schémas. Moi comme je vous dis encore une fois c'est vraiment le genre
00:25:20 :de truc, je me rappelle avoir passé des heures, j'avais un collègue qui comprenait ça tout desuite et au début moi je sais que limite j'y allais, c'était un peu le lancé de D en fait,j'arrivais tellement pas à réfléchir à ce truc là et à le faire de façon logique que j'y allais
00:25:37 :un peu au pif, je me disais bon bah allez hop t'essayes ça, t'essayes ça, et au bout de dixminutes j'arrivais à trouver la condition et à trouver comment appeler le truc. Le problème c'est
00:25:47 :surtout aussi après quand vous allez avoir, comment dire, là ça va encore parce qu'on n'a pas decomment dire de sauvegarde des données, là où ça devient vraiment chiant c'est quand vous avez parexemple des listes, donc à un moment j'avais justement ce côté récursif mais avec une liste
00:26:05 :qui devait s'augmenter à chaque fois, et là ça peut devenir assez compliqué avec le côté en plusimmuable, muable pardon, mutable de la liste qui fait qu'en fait on peut se retrouver avec une listequi grossit beaucoup plus que ce qu'elle est censée grossir, et de devoir passer la liste justement
00:26:24 :et ajouter des choses dans la liste à chaque fois avec ce côté récursif ça peut devenir assezcompliqué. Donc voilà pour cette petite introduction à la récursivité, je pense pas que j'ai besoin
00:26:36 :d'aller plus dans les détails parce qu'il faudra vraiment préparer des exemples plus concrets,donc je vais peut-être en profiter justement pour faire ce fameux glossaire sur la récursivitéjustement dans la semaine qui vient, comme ça ça restera frais et vous aurez des exemples unpeu plus précis, après sinon ça faudrait avoir des exemples plus précis pour que ça vaille
00:26:58 :vraiment le coup. Est-ce que ça me rassure parce que je me suis dit au final est-ce que c'est moiqui n'ai pas compris comment ça marche ou c'est vraiment un casse-tête? Dans un exemple qui a
00:27:15 :donné Tibo, on voit la condition d'arrêt, on voit quand est-ce que le script va s'arrêter,je suis tombé sur un exemple que j'ai vu aujourd'hui, la condition d'arrêt n'est pasvraiment visible, on a l'impression vraiment que c'est la fonction qui s'appelle d'elle-même,mais je vois pas quand est-ce qu'elle va s'arrêter. Hésite pas à m'envoyer l'exemple sur le discord
00:27:41 :comme ça je pourrais regarder si tu l'as encore. En fait c'était au travail, c'était un code quiétait vraiment dans une libre. Ok d'accord. Mais au final je pense que ça peut arriver que,
00:27:59 :je sais pas si c'est vrai ou pas, peut-être que la condition d'arrêt n'est pas vraiment dans lafonction mais plutôt au moment où tu appelles cette fonction là. Après ce qu'il y a c'est que là
00:28:12 :où ça devient un niveau encore plus perturbant, et c'est ça aussi moi que j'avais dans les exemples,j'avais ces fameux exemples avec mon collègue dont je vous parlais, c'est que souvent il y avaittrois ou quatre fonctions, en fait là vous voyez il y a tout qui est dans la fonction. Donc toute
00:28:28 :la logique se passe ici, on fait juste appeler factorial et ça revient là, et puis voilà onsort pas de ces cinq lignes de code. Moi les exemples qu'on avait en fait, il y avait dans,
00:28:39 :là ici vous voyez qu'est ce qu'on a fait, on fait juste un print. Moi dans mon exemple c'était pasun print, c'était justement une fonction qui était appelée, qui allait construire des trucscompliqués, et après en fait on appelait la fonction récursif qui allait rappeler cettefonction qui construisait ce truc compliqué dont je vous parlais, donc cette structure compliquée
00:28:57 :récursive. Donc c'était à la fin on avait un gros dictionnaire en fait avec des trucs dans tousles sens, puisque c'était cette logique justement de groupe d'objets, donc en fait on avait deshiérarchies très très complexes qui étaient construites à partir de ça. Et donc là en fait
00:29:11 :on avait trois ou quatre fonctions qui s'appelaient les unes, enfin qui appelaient d'autres fonctions,donc tout n'était pas visible directement dans ce petit bout récursif. Et là ça devient assez
00:29:22 :compliqué parce qu'effectivement tu peux avoir, normalement si je me trompe pas, tu devrais voircette condition d'arrêt dans la fonction récursive. Après ça se peut que par contre ce soit un return
00:29:34 :qui te retourne une fonction, tu vois on pourrait faire un foo ici, tu pourrais avoir un return fooici et avoir une condition ici et donc ne pas avoir l'impression que c'est la condition d'arrêt,parce que ça ressemble pas comme on l'a vu ici à juste un, là c'est assez logique tu vois if n
00:29:48 :égale 0, return, on comprend que c'est ça qui arrête. Si t'avais ici un return foo avec ici unecondition beaucoup plus compliquée, peut-être que c'est ça la condition d'arrêt mais tu vois tut'en es pas rendu compte parce que c'est un truc plus complexe. A mon avis c'est peut-être ça tu
00:30:03 :vois dans ton cas qui s'est passé. Mais je vais essayer de vous trouver des... c'est vrai que c'estça aussi qui est un peu compliqué, enfin compliqué dans le sens où pour trouver des exemples,on tombe souvent soit à les exemples très simples comme je vous ai montré où c'est quatre lignes de
00:30:20 :code et puis effectivement assez rapidement on comprend ce qui se passe et puis on se dit c'estbon j'ai compris la récursivité et après en fait quand on est dans son job, là on tombe sur un casde figure avec plein de paramètres et ça devient beaucoup plus complexe et là on se dit wow ok en
00:30:34 :fait j'ai compris sur les factorielles mais là après je comprends plus rien. Et c'est aussi çaqui est compliqué c'est que par exemple si je voulais vous montrer les exemples que j'avais,je vais essayer de les retrouver mais si je vous montre les exemples dans mon cas de figure sur
00:30:46 :des logiciels 3D, ça implique souvent une centaine de lignes de code au final et il faut déjà passerpar toutes les lignes de code pour comprendre de quoi on parle, il faudrait que je vous expliqueaussi dans mon cas c'était des logiciels 3D, c'est quoi la problématique, dans ton cas Yacine j'imagine
00:31:02 :c'était une autre problématique, par exemple ça peut être en data science, si on peut avoir destrucs comme ça des fois où dans tout ce qui est donné en fait souvent on va avoir besoin de cecôté récursif et donc ouais c'est vraiment, il faut déjà passer du temps à comprendre le cas de
00:31:19 :figure et comprendre pourquoi on a besoin de la récursivité pour ensuite voir comment larécursivité résout ce problème là, donc c'est vrai que ça fait beaucoup de choses et le mieuxmoi vraiment je trouve c'est vraiment le cas de figure où il faut frapper le mur en fait,c'est que le meilleur moyen, vous pouvez regarder plein de tutos où justement vous allez avoir un
00:31:37 :mec qui vous explique dans mon cas et voilà etc vous allez regarder le tuto, vous allez regarderle mec explique, vous allez dire bah ouais ok j'ai compris et en fait vous allez après dansvotre boulot vous retrouver face à un cas de récursivité et vous n'allez pas y arriver,
00:31:49 :il faut vraiment passer par cette étape de ne pas y arriver en fait sur un cas qui est propre àce que vous faites et même plusieurs cas parce que moi comme je vous dis ça m'a pris au moinscinq ou six fois à tomber sur des trucs où à chaque fois j'étais devant le problème et j'arrivais
00:32:05 :à le résoudre avec la récursivité, je me disais yes enfin j'ai compris et le problème d'après jeme disais merde en fait je repars à zéro et j'y arrive pas et même maintenant je sais j'y arriveun peu mieux mais même maintenant ça m'arrive de retomber encore sur des cas de figure où je
00:32:17 :me dis putain c'est pour ça que je vous disais au début que j'ai l'impression que mon cerveaun'est pas fait pour la récursivité parce que j'ai vraiment vu des gens qui comprennent ça tout desuite. Et oui Jonathan la fonction oui factorial effectivement le sait et tu peux faire ça avec
00:32:35 :le module donc Jonathan qui pose la question dans le chat, tous les trucs de maths effectivement dansle module maths qui est un module de la librairie standard donc ce module là tu vois je pense quesi je fais math.factorial tu vois il est là c'est ça. Et juste une petite question, il y a t-il genre tout ce qu'on peut faire en récursif on va dire on peut le faire en wild?
00:33:04 :C'est quoi au final qui va... Alors je crois pas que c'est le cas faudrait que je revérifie parce que je dispeut-être une bêtise mais me semble qu'il y a vraiment des cas de figure où tu peux pas t'ensortir avec la boucle wild parce que la boucle wild justement comment dire ça marchait dans le
00:33:24 :cas du countdown par exemple parce qu'effectivement on avait un truc assez linéaire dans le sens oùon voulait juste c'était juste une boucle en fait si tu veux par contre quand t'as ce côté constructioncomme je te disais ou par exemple tu vois ici on pourrait faire si on avait une liste ici
00:33:43 :c'est à la place de n en plus on passait une liste et c'est là où je vous dis je fais un exemple trèstrès rapide et ça va pas être un bon exemple parce que justement avec les listes vous l'avez peut-êtredéjà vu mais quand on fait des listes dans les définitions des fonctions ça peut faire des
00:33:57 :effets de bord assez bordélique mais tu vois imagine juste pour l'exemple ici on a un l.appendet on fait un l.append du résultat de ça donc là tu vois on va avoir cette notion de construction
00:34:09 :liste qui se construit de plus en plus et ça dans une boucle wild si je dis pas de bêtise tupourrais difficilement avoir cette notion là parce que la boucle wild en fait elle va pas pouvoir serappeler elle même elle va juste faire un truc un certain nombre de fois donc elle va pouvoir
00:34:25 :afficher un certain nombre de fois un truc mais il n'y a pas cette notion quand même de se rappeleret de passer des données à chaque fois à l'appel de la fonction donc avec vraiment avec le parceque quand on a une fonction justement on a des paramètres et on peut justement passer des
00:34:39 :paramètres et avoir ce côté récursif je vais vérifier tout ça parce que je suis pas sûr à 2000%mais je sais que moi dans les exemples que je vous ai donné sur les constructions de hiérarchieclairement on passait dans le récursif peut-être que tu vois peut-être que ça aurait pu être
00:34:57 :possible avec du wild mais dans ce cas-ci ça aurait été beaucoup plus compliqué et pas letruc évident tu vois c'est aussi ça il y a aussi une question de oui et puis de en fait de quelqu'unqui va lire votre code tu vois il y a vraiment des cas de figure la factorial c'est le meilleur
00:35:14 :cas de figure où vraiment ce côté on a le 3 qui va appeler lui même mais moins 1 et puisaprès le 2 qui va appeler lui même mais moins 1 donc on a vraiment ce côté récursif dans lafactorial qui fait que quand quelqu'un va lire va regarder ton code il va pas être surpris de
00:35:32 :voir un truc récursif et alors que s'il y avait un wild tu vois ce serait peut-être moins le caset il y a plein de cas de figure moi si je vois un truc récursif tu vois si j'arrive dans un codequi est pas le mien et que je vois c'est une fonction qui appelle elle même bah déjà tu vois ça me
00:35:45 :donne un indice ça me donne cet indice que je sais je comprends que c'est de la récursivitétu vois alors qu'avec le wild c'est pas forcément le cas tu peux faire des trucs qui ne sont pasrécursifs avec du wild. Enfin il y a quand même cette notion de boucle mais pas forcément de récursivité.
00:35:57 :Est-ce qu'il y avait d'autres questions là dessus comme je vous dis je vais essayer de vous faireça sera la bonne occasion de parce que je l'aborde pas effectivement dans mes formations et comme jevous dis c'est pas faut pas non plus se passer je pense que Thierry il a bien résumé il disait
00:36:17 :voilà que c'est que je sais plus où il disait enfin que voilà c'est une compétence essentielleà avoir parce que enfin et à avoir comme je dirais c'est pas forcément le genre de truc ça peut êtrele genre de choses qu'on vous demanderait en entretien technique donc le coup de la factorielle
00:36:36 :ces exemples là c'est quand même des trucs qu'il faut avoir rencontré parce que c'est important decomprendre ce que c'est même si vous même si après vous vous plantez moi vous voyez si jefaisais passer là encore pour l'avoir vécu si je faisais passer un entretien à quelqu'un pour
00:36:49 :l'embaucher et que je lui posais une question sur la récursivité ce qui m'intéresserait serait pastant de savoir s'il arrive à le faire parce que je sais que ça peut être un truc compliqué maisjuste voilà de savoir qu'il en a entendu parler de savoir qui c'est ce que c'est dans quel cas ça
00:37:01 :peut servir dans ma tête ça suffit et après c'est vraiment au moment où vous allez être comme jedis c'est vraiment quand vous allez travailler que vous allez tomber sur des cas de figure vousallez avoir besoin de le faire et il faut pas vous en faire c'est le genre de truc qu'on apprend sur
00:37:14 :le tas aussi ces genres de choses là justement avec des cas métiers très précis. Donc voilàvoilà pour cette partie sur la récursivité et puis dès que j'ai fait du coup dès que j'essaiede faire ça cette semaine j'ai beaucoup de trucs à faire avec justement tous les changements sur
00:37:33 :docstring, les cpf tout ça mais je vais essayer de mettre ça cette semaine pour que ça fassesuite à ce live. Est-ce qu'il y avait d'autres questions là dessus sur la récursivité ou d'autres
00:37:47 :questions qui vous sont venues par rapport à Python en général ou des choses que vous avez pu voircette semaine? Oui potentiellement sur la récursivité c'est que je commence Python mais est-ce que la
00:37:57 :récursivité c'est quelque chose que vous utilisez souvent? Non franchement moi comme je te dis lesseuls cas de figure que j'avais quand j'étais... si je parle vraiment de ce que je faisais donc avant
00:38:09 :en vfx ça m'arrivait assez rarement parce que justement c'était dans des cas très précis.En fait moi j'ai l'impression que vraiment soit vous allez tomber dans un cas très précis ou parexemple donc là encore dans les effets visuels si mon boulot dans les effets visuels avait été de
00:38:28 :travailler tout le temps avec des hiérarchies, effectivement j'aurais fait de la récursivitétout le temps mais vraiment tout le temps quoi j'aurais fait presque que ça. Sinon comme c'était
00:38:37 :mon cas en fait ça m'arrivait une fois à l'année où j'avais un cas de figure où il y avait un trucde hiérarchie et ça m'arrivait d'avoir à faire de la récursivité mais c'était très très trèstrès rare. Et il y a des cas de figure où par exemple en web, je pense à Django, pour faire un
00:38:52 :site web avec Django, moi sur Doxtring sur je sais pas combien de dizaines de milliers de lignes decode j'ai zéro truc de récursivité. Donc je pense qu'il y a des gens qui peuvent passer 40 ans et
00:39:01 :développeurs et à jamais avoir besoin de faire de récursivité tu vois. Et à l'inverse il y a peutêtre des gens qui font des maths par exemple tu vois où là ils vont avoir beaucoup de trucsrécursifs parce que dans le domaine mathématiques il y a pas mal de trucs récursifs. Mais voilà.
00:39:14 :Ok d'accord. C'est pour ça il faut pas s'en faire vraiment avec ça non plus je pense.D'autres questions là dessus? Non ça n'a pas l'air. Ok.
00:39:33 :J'avais pas commenté mais je sais pas si tu as pas le temps je verrais plus tard.Ouais non mais vas-y. Là du coup je t'avoue que je traîne pas mal sur ta cover plan en ce moment et
00:39:45 :j'ai un truc que j'ai pas compris parce que en gros avec Django et les forms je cherche à fairedu multi-upload et je compte tout le temps sur le truc en gros dans une fonction args et quarks.
00:39:59 :Ah oui. J'avoue j'ai du mal à cerner. Ouais ok ouais on peut faire une petite partie là dessus.Je sais pas toi d'ailleurs je me sens il y a quelqu'un qui m'a posé, c'était peut-être surUdemy, on m'a parlé des args et quarks. Alors déjà la première chose vers laquelle je vais
00:40:16 :te renvoyer et je vais expliquer après. Donc dans le glossaire, j'ai deux glossaires justement surles args et quarks. Donc ça c'est un bon point de départ déjà pour comprendre en fait ce que
00:40:33 :c'est les args et les quarks. C'est un nom assez bizarre. Donc déjà je vous conseille d'aller voirces deux glossaires parce qu'ils expliquent tout ce que je vais vous expliquer là mais vous aurezles supports après si vous voulez revenir. Et juste avant que j'oublie, tu vas être content
00:40:53 :parce que dans la formation e-commerce qui va sortir du coup la semaine prochaine, il y a unegrosse partie sur les formulaires justement et sur les formulaires multi-upload parce que c'estun truc ultra stylé. Ouais parce que c'est super bien foutu en fait. C'est incroyable, avec trois
00:41:13 :lignes de code tu peux faire des multi-formulaires et Django il te fout tous les inputs, tous lestrucs et après il gère les primary keys et il fait tout tout seul. Et donc j'ai une bonne partie
00:41:24 :là-dessus. Je n'ai pas compris, tu dis multi-upload ou multi-step? En fait l'idée c'est que tu vasavoir plusieurs modèles sur la même page parce que tu as un formulaire classique où tu peux avoirun formulaire qui est relié à un modèle et puis tu vas changer un truc dans ton formulaire et ça
00:41:38 :va changer un modèle et là dans le cas du e-commerce en fait c'est que tu as ta page,tu as le panier de la boutique et du coup tu vas avoir plusieurs articles éventuellement et doncdans le cas de la boutique c'est pour modifier la quantité d'articles ou dire que tu veux supprimer
00:41:54 :un article. Donc tu vois là tu vas modifier plusieurs formulaires, tu vas avoir potentiellementune dizaine de formulaires que tu vas modifier et qui vont se sauvegarder tout seul et ça tientvraiment à la fin, tu donnes en une ligne quoi, tu donnes ton request.post, c'est vraiment trop
00:42:07 :bien. Et c'est vraiment un truc que même en anglais, il y a même la documentation de Djangoqui est quand même bien faite, je trouve que sur ce truc là ça manque un petit peu d'exemples ettout donc je suis content que vous aurez des exemples pour ça. Et pour les, donc je reviens,
00:42:22 :voilà parenthèse fermée là dessus, mais pour les ARGs et Quarks, en fait c'est des trucs dontqu'on voit souvent effectivement en orienté objet ou quand on est sur des frameworks en fait,parce qu'on va sûrement dû voir des exemples comme ça, ou moi c'est un exemple, je vais peut-être
00:42:42 :vous le montrer sur notre site. Non parce que ça me fait rire, parce que dans la formation tu disais,il y a un moment où tu l'utilises et tu dis bon bah ça normalement c'est maîtrisé. Oui parce que
00:42:54 :oui c'est le genre de truc. Tu t'en parles aussi dans ta formation, dans la formation complète pourle coup. Oui c'est vrai que je sais plus dans quelle formation j'en parle, je sais que j'en
00:43:04 :parlais dans la formation avancée, je crois que j'en parlais un moment dans les 40 heures deformation complète, je vous en parlais quelque part, mais je vais vous montrer, donc je vaispartir sur docstring, ça va être plus simple. Donc par exemple, vous voyez toujours mon écran là,
00:43:21 :oui donc par exemple ici vous voyez on a, qu'est ce que je faisais ici, en fait c'est quand on faitde la surcharge, donc quand on va, d'ailleurs j'ai plus besoin de le mettre, je corrige mon code enmême temps. Donc en fait ce qui se passe ici, je vais vous montrer plutôt, ah merde attendez,
00:43:46 :c'était dans le projet e-commerce, est ce que je l'ai ici, ça serait plus parlant, comment je l'avaisappelé, merde, ah non c'était ok, alors attendez, je vais vous retrouver ça, c'était avec lecommunity edition, justement, docshop, voilà, parce que je refais le modèle utilisateur en fait,donc là pour ceux qui n'ont pas fait Django, ça va être peut-être un peu abstrait, accounts,
00:44:20 :models, voilà, et ici, voilà, donc tu vois ici je refais des fonctions, donc j'hérite du baseuser manager, qui dans cette classe en fait, il y a ces deux fonctions qui sont déjà définies,et que je dois redéfinir, parce qu'en fait dans ce cas-ci, j'utilise l'adresse email,plutôt qu'un nom d'utilisateur pour créer un compte. Et donc en fait, ce qui se passe ici,
00:44:47 :c'est que moi j'ai absolument besoin de l'email et du mot de passe pour créer un utilisateur,mais quand quelqu'un va utiliser cette fonction, imagine que tu es un développeur qui dans unshell utilise create user, il va peut-être créer un utilisateur avec un mail, voilà,mail, hop, gmail.com, avec un mot de passe, mais peut-être qu'il va aussi vouloir passer
00:45:11 :d'autres informations, et ça je ne peux pas le prévoir, donc en fait quand tu crées unutilisateur, tu pourras avoir plein plein plein de choses comme le nom de famille, le prénom,le nom de famille, le numéro de téléphone, plein plein plein de trucs comme ça. Et donc là en fait,
00:45:26 :ce qu'on pourrait faire, c'est les rajouter à la main ici, dire bon bah on va aussi luipermettre de rajouter le phone number, d'avoir aussi le birth date, et plein plein de trucscomme ça. Le problème c'est qu'il y en aurait potentiellement une dizaine, et potentiellement
00:45:41 :d'autres auxquels tu n'as pas pensé. Donc pour simplifier tout ça, on va dire bah hop,tu récupères les quarks. Et quarks, qu'est-ce que c'est? Bah en fait ça va récupérer tout ce qui
00:45:51 :n'est pas défini ici. Donc là email, ça va récupérer l'email, password, ça va récupérerle password, et là si je mets autre chose, si je mets first name par exemple, bah là en fait,tous les paramètres qui ne sont pas des paramètres que tu as définis ici, que tu passes à cette
00:46:12 :fonction create user, et bah il va les récupérer dans quarks. Et quarks, qu'est-ce que c'est?C'est un dictionnaire. Et en fait, ce qu'il faut savoir aussi, c'est que ce nom n'a aucune
00:46:23 :importance. Ce qui est important, c'est les deux astérisques ici. Ouais, c'est ce que je disaisdu plus sérieux. C'est ça. Là en fait, tu peux l'appeler Patrick, tu peux l'appeler n'importe
00:46:31 :quoi. Ce qui est important, c'est les deux astérisques. Et après par convention, on met quarks. Et quarks,qu'est-ce que ça va? Quarks dans ce cas-ci, ça serait égal à un dictionnaire qui va contenir
00:46:40 :donc ton paramètre et ta valeur, Vincent. Comme ça. Et les args, qu'est-ce que c'est? Les args,c'est pareil, sauf que ça va être une liste en fait, alors que ça c'est un dictionnaire. Donc
00:46:53 :c'est vraiment la seule différence, et pour ça après je vous renvoie vers, si vous voulez voirplus en détail, je vous renvoie vers les articles. Quarks, vous voyez en fait, ça va permettre d'envoyer
00:47:02 :un nombre indéterminé d'arguments. Donc là par exemple, on pourrait en envoyer 3, comme on pourraiten envoyer, là vous voyez, j'en envoie 0, 1, 2, 1 ou 3, et ça marche dans tous les cas. Vous voyez,
00:47:12 :c'est juste un print. Et en fait, donc là dans le cas de, pour finir cet exemple, tu vois ici ceque je fais après, c'est que, hop, c'est que ici en fait je passe tout simplement à self.model,
00:47:27 :je passe ce quarks et j'utilise les deux astérisques pour unpacker en fait le dictionnaire.Ce qui fait que ici, plutôt que de passer le dictionnaire directement, c'est comme si onpassait ça comme ça en fait. Voilà. Et donc, je vais revenir pour terminer sur cet exemple là.
00:47:48 :Donc quand on fait de la surcharge, tu vois, par défaut en fait, là ce que je fais c'est que jeveux, quand je sauvegarde le modèle, je veux rajouter un truc. Dans ce cas-ci, je veux rajouter
00:47:59 :le prix x12 pour sauvegarder le prix normal dans une autre variable. Donc par défaut, ce qu'on faiten fait, c'est la même chose, c'est qu'on pourrait juste faire ça et là ça change rien. Là en fait,
00:48:10 :on dit, quand t'appelles la méthode save, bah tu vas tout simplement appeler la méthode save avecsuper donc de models.models. Et là encore, dans cette optique de si jamais on passe d'autre chose
00:48:23 :à save, il faut passer ces informations, et bien tu vas rajouter le harks et le quarks et tu vasles passer également. Parce que si tu le fais pas, si tu mets pas ces trucs là ici, et si tu les
00:48:33 :passes pas ici, quelqu'un qui sur ton modèle fait un point save, si finalement il dit par exemplefalse égale à true, et bien ce truc là, il sera pas récupéré. Et là encore, tu pourrais dire
00:48:47 :force égale false, ou juste même pas de valeur par défaut, et là du coup on sait qu'il peutpasser ça. Le problème c'est que là encore, save, je sais pas, il y a peut-être 5, 10, 15 paramètres
00:48:58 :qui sont possibles à passer, donc ce serait trop compliqué à chaque fois d'aller regarder dans ladéfinition de la fonction quels sont tous les paramètres possibles qu'on peut passer, puisaprès les noter un par un, force machin truc, donc ce qu'on fait c'est qu'on met ces trucs là,on met les harks et les quarks, et comme ça, ça permet de passer tous les arguments possibles,
00:49:17 :les arguments non nommés et les arguments nommés, c'est ça en fait la différence entre les deux,ça c'est harks, c'est le raccourci pour arguments, des arguments qui ne sont pas nommés, et quarksc'est keyword arguments. Mais du coup on est d'accord que pour les quarks il faut peut-être
00:49:37 :ton champ, ton modèle qui correspond à ce que tu veux passer? Oui après c'est sûr qu'il fautque ça corresponde à quelque chose, dans ce cas-ci, si tu passes quelque chose, alors aprèsje réfléchis, là est-ce que si tu lui passais, bonnes questions, oui tu pourras avoir un problème
00:50:00 :dans le sens où si tu fais un save et que tu lui passes patrick égale à bonjour, comme ça,bah là effectivement tu vas passer patrick bonjour à la fonction save de ton modèle,et là il va dire patrick je sais pas ce que c'est, c'est pas un truc valide quoi, donc là
00:50:18 :effectivement tu aurais une erreur. Donc voilà, là on rentre dans des trucs un peu plus poussés,il y a peut-être des gens qui sont un peu perdus, moi je vous conseille d'aller relire le harks etle quarks, ça explique quand même pas mal dans les détails, ce qui est important de comprendre
00:50:35 :en fait c'est aussi, ce qu'il faut c'est de bien comprendre la notion d'unpacking avant decomprendre, et je crois que d'ailleurs, je crois que j'ai un glossaire sur l'unpacking, ouais c'estça, donc le troisième en bonus, il faut vraiment comprendre cette notion d'unpacking parce que c'estça en fait, c'est là dessus qu'est basé l'astérisque simple et double, il faut vraiment
00:50:57 :comprendre ça pour après comprendre ce qui se passe quand on passe le harks et le quarks àdes fonctions. Donc je vais vous rajouter tout ça dans les petites notes et puis je vais vous le
00:51:05 :passer. Est-ce qu'il y avait d'autres questions là dessus? Non, merci. C'est bon? Ok, on arrive àla fin de l'heure, je sais pas s'il y a des dernières questions, interrogations, choses quevous vouliez aborder? Non, pas pour ma part. Bah écoutez, s'il n'y a pas de questions, on va arrêter là,
00:51:38 :et moi je vais donc vous partager les enregistrements qui sont disponibles sur accompagnementdans mentoragroupé ici. Celui-là, bon, je vais essayer, enfin celui-là il était déjà vu des petits
00:51:51 :problèmes de connexion, c'était les premiers qu'on a fait où on testait en plus justement cetteplateforme là, donc ça va se frotter au fur et à mesure, celui-là il y avait quelques petites coupes,je sais pas si vraiment vous avez un intérêt à voir la rediffusion, mais en tout cas ils seront
00:52:07 :tous disponibles sur cette page, et également il y aura, bah le lien ça va rester le même, c'est celien docstring accompagnement, donc normalement il n'y a pas de raison qu'il change, mais toutes lessessions prévues vont être affichées ici. Je sais pas si je vais garder une heure fixe, c'est un peu
Aucune occurrence trouvée pour « ».
00:06:00
Question sur Django VS Shopify
00:11:30
Explications et discussions autour de l'importance de la récursivité en Python
00:39:30
Explications sur les args et kwargs
Bravo, tu es prêt à passer à la suite