Session du 21 octobre 2024 à 21h00
Algorithmique & Performance
Programmation Orientée Objet (POO)
Deviens membre Premium magic_button
Cette session de mentorat est réservée aux membres Premium. Rejoignez-nous pour accéder à toutes les rediffusions des sessions de mentorat !
Premium
- check +100h de formations
- check +180 exercices de code
- check +100h de mentorats en rediffusion
- check 20 projets
- check Mentorats groupés hebdomadaires
- check Support individuel avec nos mentors
Session de mentorat TOSA
Pour cette session nous allons parler de la récursivité et des dataclasses.
00:00:00 :.Ok. En fait, ça fait déjà quelques semaines que je suis en train de développer mon portfolio en ligne.Et là, je l'ai fait avec Plano Components. Et donc, actuellement, mon portfolio ressemble un peu à ça.
00:00:49 :J'ai une page où j'ai mis l'accueil, la partie à propos, et ensuite la partie sur l'éducation et l'expérience.La partie compétences et les contacts, avec un petit footer juste en bas.
00:01:24 :Alors, tout ça, je l'ai fait avec Django Components. Alors, c'est quoi Django Components en soi ?C'est un framework de Django qui permet de créer des composants réutilisables. Par exemple, la navbar qui est ici au-dessus,
00:01:46 :je n'ai eu à créer qu'une seule navbar, et ensuite je l'ai répercuté sur la page du blog. Et donc, c'est un peu ça.Donc, Components te permet d'écrire des composants réutilisables comme ça pour le UI. Alors, du côté code, ça ressemble à quoi ?
00:02:22 :Je peux dire que ce sont des scripts que je lance depuis mon projet.Ah, ok. Merci.Et du coup, ça ressemble à quoi ? Lorsqu'on installe Django Components, il y a quelques trucs à modifier déjà. Du côté template, il y a le building ici à rajouter,
00:02:57 :Tenir en compte le composant qu'on va créer. Et donc, si j'ouvre l'architecture du projet, vous remarquerez directement que mes composants sont ici au-dessus.Mais du côté création de projet, c'est un peu la même chose que quand vous créez un projet avec Django. C'est vraiment la même chose, sauf que vous devez rajouter juste ces quelques lignes de code dans votre settings.
00:06:45 :Mais si j'avais aussi du JavaScript, j'allais écrire par exemple JS, et ensuite dans l'architecture, j'allais écrire par exemple navbar.js comme ça.Donc c'est un peu ça. C'est vraiment question de segmenter le code. Et ce n'est vraiment pas limité. Comme vous pouvez le remarquer, ici c'est vraiment statique.
00:11:01 :Donc c'est un peu ça. Et donc, je continue un peu avec le développement de mon portfolio.C'est sympa, ouais. Et tu devrais regarder aussi du côté de Django Cottons. Ça pourrait peut-être t'intéresser aussi.
00:11:22 :D'accord.J'envoie Django Cottons. Hop. J'envoie ça tout de suite. Moi je suis assez très amusé des composants Arcel. Les CSS et les HTML, tu les écris de A à Z ou tu as un système qui te les génère plus ou moins avec Django Components ?
00:12:00 :Ok. Sympa. Bravo Arcel, c'est cool. Et du coup je t'envoie un petit lien si ça peut t'intéresser pour les autres aussi.D'accord. Sinon je coupe les partages.
00:12:36 :Oui.D'abord comme Django.Oui, tu dois l'installer. Je pense que je vais envoyer la commande d'installation.Merci Arcel. En tout cas bravo, c'est propre en plus.
00:12:57 :Merci beaucoup.Merci à toi. Pour la toute infos avec moi je suis un peu plus traditionnel, mais j'ai tendance à faire un template de base, et après sur chaque page je vais l'étendre ici.
00:13:30 :Du coup toi tu passes d'Extends en fait, j'ai l'impression.Non, j'ai tendance à ne plus l'utiliser.Tu ne l'utilises plus ?Je ne l'utilise presque pas en fait.
00:13:43 :Ouais c'est ça, c'est une autre approche.Ok, ok.En tout cas merci à toi.Et Gab, Django Cotton là c'est comme Django Component ou bien ?
00:14:05 :Donc je sais qu'il utilisait Django Component et qu'apparemment ça il a l'air de vraiment adorer le Django Cotton là.Ça pourrait être pour le remplacer, à voir s'il ne peut pas l'utiliser à la place par exemple.
00:14:17 :Ok.Donc voilà, et qu'est-ce que j'allais dire ? On va faire durer un peu cette session parce que du coup il est déjà pas mal tard, on va la faire durer un peu plus longtemps.
00:14:31 :Là ce soir je voulais vous parler de la récursivité.Est-ce que vous êtes tous à l'aise avec ça ou ça vous donne mal au crâne ?
00:14:40 :Je vous rassure mais moi j'ai mal au crâne.Il y a plein de gens qui ont mal au crâne avec la récursivité.On est dans les strates de récursivité.
00:14:48 :Ouais, mais là je vais en parler mais dans un contexte pas hyper compliqué de toute façon.Même au niveau du Toza, même dans la vie de tous les jours, je ne sais pas où je dois utiliser mais pour des défis.
00:15:02 :Après j'ai jamais eu à faire des gros trucs avec.Mais après à voir dans votre utilisation.En gros, la récursivité ça va être une fonction qui va s'appeler elle-même et il vous faut toujours un cas de base.
00:15:17 :Donc c'est toujours tout comme ça.Donc vous avez un cas de base.Donc là ça va être la condition qui arrête la récursion.Et ensuite vous avez un cas récursif.
00:15:37 :Et là c'est avec.On va mettre avec un argument modifié.Vous allez comprendre après.Et donc c'est là où la fonction va s'appeler elle-même.Donc là j'ai l'exemple quasiment le plus connu que j'ai copié, que j'ai collé.
00:15:53 :Ici on a pour la factorielle.Donc pour la factorielle ici, vous allez par exemple avoir votre cas de base.Donc ici on va retourner 1.
00:16:15 :Si n est égal à 0 ou n est égal à 1.Et sinon en fait on va retourner, on va aller dans le cas récursif.
00:16:22 :Ok ?Vous me dites si jamais il y a, si vous avez une question, un doute.En gros, vous allez descendre en fait dans vos cas.
00:16:35 :Et dès que le cas de base va être atteint au niveau du dernier appel, on va remonter la pile d'appels.Les appels récursifs au fond, ça va être les premiers à retourner un résultat.
00:16:47 :Donc il faut toujours penser au cas de base.Et le cas de base pour éviter ce qu'on appelle justement un stack overflow.Et j'ai jamais essayé parce que ça m'a toujours stressé.
00:17:00 :Et Python normalement il y a une sécurité, il y a une récursion erreur.C'est limite par rapport à Python qui se met.Voilà.Pour l'instant vous me dites si ça va.
00:17:11 :Et là on va partir dans des exemples pour un peu mieux comprendre ça.Tac, tac.Alors attendez, je vais faire un test.Par rapport à la taille de mon terminal là, parce que c'est un peu zoom.
00:17:27 :Pourquoi ? Ah mais c'est normal que je ne voie rien.Hop.Voilà c'est bon, c'est le terminal, ça va encore.Du coup, exemple de récursion.
00:17:42 :On va avoir une liste que j'ai un peu toute créée là, ici.Alors je n'ai pas le code.Si j'ai ma liste qui m'avait servi.
00:17:53 :Ici je vais avoir une liste.Voilà, donc ici je vais avoir ma liste.Et ce que je vais vouloir faire c'est aplatir ma liste.Donc là vous allez voir ce que ça veut dire.
00:18:05 :En gros, quand je dis aplatir ma liste,c'est que je veux que ma liste ça devienne,tac, ça.1, 2, 3, 4, d'accord ?Et le but ça va être de rentrer dans chaque sous-listepour, peu importe la profondeur, pour retourner cette liste là.
00:18:25 :Donc par exemple, ici je vais créer une fonction.Je vais l'appeler, je ne sais pas, FlatList.Donc celle-là je l'ai en tête parce que je l'avais dû la faire.
00:18:38 :Je l'avais créée pour un défi.J'avais un défi à faire.La première fois qu'on fait une fonction recursive,ça paraît un peu bizarre, mais après ça paraît plus simple.
00:18:49 :Donc là, vous allez avoir d'abord une liste.Attends, les stacks, c'est bon.Les choix de changer de clavier.Votre liste ici, c'est une liste à vide.
00:19:02 :Vous voyez, on va boucler par rapport à cette liste,sur cette liste, tac.Et donc ici on va avoir le premier cas qui va être recursif.
00:19:18 :Après j'ai un autre exemple que je vais vous laisser travailler pour moi.Vous allez avoir votre cas recursif qui va être par exemple,on va faire un if, if instance.
00:19:28 :Si E, en gros, c'est une liste,on va appeler ici flat.extend.On va utiliser extend et on va appeler notre fonction.Elle va s'appeler elle-même et on va envoyer...
00:19:50 :Hop là, je me suis un peu trop lâché.Flat list.Donc déjà, premier cas.Ici c'est le cas recursif.Ensuite, vous allez avoir le cas de baseoù ici on va tout simplement ajouter notre élément.
00:20:19 :Ça c'est bon, pas de problème.Et ensuite, je peux retourner ma liste.Normalement, je n'ai pas fait d'erreur, tout devrait être bon.On va essayer ça.
00:20:34 :Je vais faire un print.Flat list.Et je vais mettre ma liste qui est là.Non, là il y a un problème.Qu'est-ce que j'ai fait ?
00:20:52 :Flat, j'ai ma liste.Je crois que c'est ton return qui n'est pas...Merci, c'est bon, c'est ça.Voilà.Merci Stéphane.Donc là, du coup, oui.
00:21:08 :J'ai ma liste qui a aplati.J'ai bien un 2, 3, 4.Donc là, c'est le cas recursif.Ici, l'élément, c'est une liste.C'est pareil, on va faire un extendet on va rappeler cette liste, cette fonction,avec un argument modifié qu'on a vu tout à l'heure.
00:21:27 :Et sinon, on a le cas de base ici.Je crois que j'ai préparé un petit doc qui explique ça.Je vais la copier-coller parce qu'elle est un peu longuepour expliquer tout ça.
00:21:38 :Alors, attendez.Et après...Voilà, c'est ça.Donc on a le premier appel.Ici.Il va être là.On va avoir notre liste qui est là.
00:21:51 :Donc on va avoir un qui va être ajouté à flat.Pour 2, 3 et 4 ici,donc la sous-liste qui est là,on va faire un appel recursif.
00:22:00 :Deuxième appel.On va être là.Et on a deux qui vont être ajoutés.Pour 3 et 4, on a un nouvel appel recursif.Ainsi de suite.
00:22:10 :Donc là, on a notre nouvel appel.Et on a 3 et 4 qui sont ajoutés.Et ensuite, ce qui se passe avec Python,c'est qu'il remonte la pile d'appels.
00:22:18 :Et donc on va avoir le troisième appel.Deuxième appel.On a notre résultat là.Et le premier appel qui va ajouter un à ce qui est là.
00:22:26 :Et on aura ce résultat final.Voilà.Donc je sais que...Je sais que pour certains, et même pour moi encore,quand on parle de récursion,une fois j'avais participé à un challenge.
00:22:38 :Pareil, c'était un truc,mais c'était encore un niveau avec des nœuds dans les dictionnaires.C'était...Au final, c'était pas compliqué quand tu avais le résultat,mais quand tu réfléchissais, c'était assez galère à faire.
00:22:51 :Mais voilà.Donc là, on a des utilisations simples de la récursivité.Je pense que déjà,si vous arrivez à comprendre ce genre de choses pour le Toza,au niveau de la récursivité,vous devriez être bon,parce que je ne me souviens pas avoir eu d'exercicesou de trucs très compliqués par rapport à ça.
00:23:05 :Ça ne me dit rien.Mais voilà.Comme ça, vous avez déjà ici une base.Sauf que maintenant, on va faire quelque chose.Alors...Une question idiote de novice, là.
00:23:21 :Je vois qu'il y a des append et des extend.Oui.Pourquoi il y a les deux, là ?Alors, en fait, le extend, tu vas ajouter l'élément...
00:23:32 :Si tu fais par exemple un append,si tu ajoutes...Si ton E, l'élément E, c'est une liste,et que tu fais un append,tu vas rajouter la liste elle-même.
00:23:43 :En fait, ça va être plus simple.Je ne vais plus te parler, mais...Tu vas avoir une liste que je vais appeler L.Je ne sais pas, je vais l'appeler...
00:23:52 :Attendez.Je me suis fait une écrochasse ici.Celui-là.Tac.Hop.Je ne sais pas, j'ai une liste 1-2.Il bug, c'est bon.Et là, par exemple, je vais avoir une deuxième liste.
00:24:07 :Je vais l'appeler L2.L.L2.Hop.Et je vais avoir comme deuxième liste,du coup, on va l'appeler...On va mettre dedans 3, 4, peu importe.
00:24:20 :Hop.Voilà.Et ici, si je fais F...Mince.Je fais n'importe quoi.Tac.Bon, option.Hop.J'ai encore du mal à me faire un nouveau clavier.
00:24:34 :Hop.Et là, si je fais L.append,et que j'ajoute L2...Oui, ça n'a pas marché.Oh mince.Je ne peux pas printer le L.append directement.
00:24:52 :Hop là.On va le faire là.Ce sera mieux.On va faire le L.Hop.Je vais aller trop vite.Voilà.Donc là, ici, on voit bien mon résultat ou pas ?
00:25:06 :Oui.Oui.Ok.J'ai mon 1, 2, 3, 4, comme ça.Et si je fais par contre...Extend.Tu vois la différence ?Oui.En fait, les éléments, ils ne sont pas juste en temps que le 10,mais ils sont déballés à la fin de la liste.
00:25:25 :Oui, ok.Ok ?Je me suis permis de t'envoyer un petit schémade comment je la vois à la réclensivité.Je ne sais pas si ça peut aider les autres.
00:25:35 :Comment tu la vois ?Attends, je n'ai pas...Envoyez ça sur Discord.Oui, je ne l'ai pas...Sur le PC, là, je ne l'ai pas allumé.
00:25:43 :Tu F, tu descends...Oui, tu descends la pile et après tu remontes tout.Tac, tu rentres dedans.Tu as F, tu as ta fonction R1.
00:25:57 :J'essaie de voir si je peux la récupérer.Tu pourras la partager sur le Discord, d'ailleurs.Je peux la partager sur le Discord, il n'y a aucun problème.
00:26:08 :Du coup, j'ai un petit exercice pour vous, si vous êtes motivés.Franchement, je l'ai fait tout à l'heure avant la...C'était le petit défi, c'était de le faire tout à l'heuresans GPT, sans rien du tout.
00:26:24 :Il n'est pas extrêmement compliqué.Mais, c'est en récursivité.En fait, ici, je voudrais...Je ne sais pas si...C'est bon, on va ouvrir mon écran encore.
00:26:38 :Je voudrais ici que ma fonction,elle retourne la somme de tous les entiers que j'ai,toutes mes valeurs, ici.Donc, ça veut dire que la fonction,elle est capable de rentrer dans chaque dictionnaireet d'ajouter au total chaque entier.
00:26:57 :Donc là, par exemple, je vais initier la fonction,sundict, je l'appelle comme ça, je mets un nom bidon.Là, je vais avoir mon dictionnaire,on va l'appeler Dico.
00:27:08 :Est-ce qu'il y en a qui ont une idée de comment faire ?Gab, allô ?Oui.Si je comprends bien, tu dis, c'est-à-dire,sundict va retourner la somme des entiersde chaque clé, c'est ça ?
00:27:34 :De chaque valeur.Oui, oui.Là, par exemple, ça retournerait avec l'exemple que j'ai là-haut.3, 3.On pourrait avoir 3, c'est ça ?C'est ça, voilà.
00:27:43 :Ça retournerait à 3.Alors, je vais mettre mon dictionnaire,je vais le mettre dedans.Comme ça, on va voir le print.Hop.Voilà.Hop.Donc, est-ce qu'il y en a déjà qui ont une idée ou pas ?
00:27:59 :Ouais.Ouais.Alors, attends.Je vous laisse réfléchir une minute.Moi, juste, perso, je commence ici pour un cas comme ça.Vu que je retourne un entier, la somme de tous les éléments,je commence par me faire un...
00:28:24 :Résultat de 0.Ouais.Voilà.Je mets juste ça à la base, à la limite.Mais bon, après, il y a peut-être d'autres moyens de le faire.
00:28:32 :Perso, je fais comme ça.J'ai vendu YouTube.Voilà.On va dire que c'est une approche classique.Voilà.Oui, parce que la classique, pour les défis que j'ai faits,j'en fais jamais, sinon.
00:28:48 :J'en fais jamais.Donc, je reste très classique quand je le fais.Il s'agit d'avoir mal au crâne.S'il n'y a personne qui a une idée, j'avance.
00:29:00 :Il n'y a pas de problème.Pour la prochaine lignée.Après, moi aussi, je mets une idée.Ouais.Je boucle sur le dictionnaire.Bon, pour l'instant, on a...
00:29:14 :Quai value...Dico.items.Ok, .items, si tu veux.Quoi qu'il y ait value, par contre, je partirai.Tu as dit quoi ?Quoi qu'il y ait value.
00:29:29 :Oui, excuse-moi.Parce que moi, j'ai...Ok, vas-y.Dico.items.Je n'ai même pas besoin d'items pour le faire,mais je veux voir ce que tu vas faire.
00:29:40 :Vas-y.Ok.If v...Non, if isInstancev,int.Là, je fais un résultat,j'incrémente le résultat de la valeur de v.Ok.On a pour l'instant quasiment la même choseque j'ai trouvée la première fois.
00:30:07 :Ok.Et ensuite, else.Donc là, tu es dans le cas de base.Ok.Donc là, Stéphane, il a mis le cas de base.Il fait un récursif.
00:30:17 :Else, je fais sumDico.Enfin, else, return sumDico.Non.J'ai une bêtise.Si, return...Enfin, else...Résultat ou...Attends, attends, attends, que je ne dise pas une bêtise.
00:30:37 :Est-ce qu'il faut que je renvoie dans le résultat ?Sauf que là, pour l'instant,je n'ai pas encore de choses comme ça.Tac, tac.Ouais, si.
00:30:51 :Alors, donc, sumDico.Sum.Je passe en paramètre Dico avec la clé K.Attends, tu fais...Ah, la sumDic, excuse-moi.Voilà.SumDic.Ok, donc là, on est différent.
00:31:02 :Sauf que tu fais sumDic.Ok.Et là, tu fais quoi ?Je passe en paramètre Dico avec la clé K.Tu veux passer Dico avec la clé K ?
00:31:13 :Ok.Et ensuite, je me remets là où je suis.Je me demande si je ne passerais pas plutôt en...Non, je ne le fais pas.
00:31:33 :De toute façon, après, on se trompe, on teste,et puis on recommence.On peut tenter un return de résultat,mais je ne suis pas sûr du résultat, là,ce coup-là, comme ça.
00:31:45 :Bon, on va voir ce que ça nous donne.Donc, là, il nous donne 1.Ouais.C'est ce qui me semblait.C'est le return.En fait, je renvoie dans la fonction,mais c'est le problème du return.
00:31:55 :En fait, moi, quand je l'ai fait,à la base, j'ai fait un items2C,mais je me suis dit,on ne pourrait pas faire un items2C.
00:32:02 :Mais je me suis dit,on pourrait simplifier.Et finalement...Un values.J'ai fait un point values.Parce que finalement,je ne peux me servir que des valeurs.
00:32:12 :Ici, j'ai fait comme toi.Par contre, dans mon else,ici, j'ai fait différemment.J'ai fait directement mon résultat.Et ici, j'ai fait mon plus égal.
00:32:23 :Et là, j'ai renvoyé ici,avec la valeur,et ça a fonctionné.C'est normal que ça a fonctionné ?Oui, parce que chez la valeur,si c'est un dictionnaire, c'est bon.
00:32:36 :C'est un cas simple.Là, j'avais 3.Là, on prend en compteque si on a des dictionnaires imbriqués.Par contre, j'arrive pas à saisir comme çacomment la valeur du 2revient dans le résultat.
00:32:55 :Même moi, j'ai mis 2.On est d'accord que là,on a récursif et 4 bases.Là, par contre, ça fonctionne.Par contre, là, c'est le casoù ici, on a sur des dictionnaires imbriqués.
00:33:13 :Comme sur la liste imbriquée.Je n'ai pas fait un truc trop compliqué.Mais en gros, ici,chaque appel à semdip,ça crée un nouveau cadre d'exécution.
00:33:24 :Et en fait,ça va avec sa propre variable résultat à chaque fois.Ils vont avoir leur propre variable résultat.C'est le contenu de résultat de la finqui renvoie dans le résultat d'origine.
00:33:35 :En gros, le résultat égale 0,ça va initialiser à chaque foisune nouvelle variable localepour chaque appel de la fonction.Et les résultats sont remontéset accumulés niveau par niveau.
00:33:45 :En fait, le résultat égale 0,ça va faire en sorteque chaque sous-calcul commence de 0.Et c'est pour ça que là,je suis d'accord avec vousque si ça vous paraît un peu...
00:33:56 :ça donne mal au crâne ou compliqué,c'est normal,mais il faut que vous en fassiez.Je vous conseille de lire aussides articles sur la cursivité.
00:34:04 :Moi, je pense qu'il y a quelqu'unqui m'a donné un petit cours en personneque je remercie,qui s'appelle Boïc Denis sur le Discord.Il y a un moment donné, il m'a donné un cours.
00:34:13 :Mais voilà.En gros, là, pour un cas simple,on peut le faire fonctionner comme ça.Je pense...Oui, excuse-moi.Oui, Gabriel ?Oui.Oui, je veux dire,juste pour voir, là,je pense que ça ne sert à rien,mais est-ce que tu pourrais remettrecomme Stéphane,score k,v indico.items.
00:34:32 :Juste sur ton exemple,on va voir ce que ça donne.Il ne s'est rien changé d'autre.Qu'est-ce que ça donne ?La même chose, en fait.
00:34:47 :Ça marche aussi.C'est juste que là, ça...Comment ça se faitqu'on avait un tout à l'heure, en fait ?Ah non, parce que tout à l'heure,tout à l'heure, en fait,Stéphane, il passait par...
00:35:02 :Tu faisais quoi, déjà ?Tu t'appelais à...J'avais exécuté la fonction directement,mais comme je n'avais pas de travail de retoursur le résultat,c'est pour ça que le 2 ne remontait pas, en fait.
00:35:10 :Mais ce n'est pas une histoire d'itemsou de value, là.D'accord.Oui, sinon, après,on pourra toujours utiliser l'items,mais là, il n'y a pas d'intérêtd'avoir l'items.
00:35:19 :Oui, oui, tout à l'heure.Mais pour ceux qui débutent,après, pour les variables non utilisées,on peut toujours utiliser l'underscores'il y a besoin, mais...
00:35:28 :Donc, voilà.Allô ?Oui.Bon, je pense que si...Bon, j'arrive un peu à comprendre.Le résultat plus ou moins égal à son deck,si on l'exécute manuellement,le else, genre,disons, la première itération, le for,on sait que 1, c'est un entier,ça, c'est bon,ça, c'est résolu,
00:35:56 :on met 1 dans le résultat,ça, c'est bon.Mais le else, quand on vient,le b, la valeur,ce n'est pas un entier,c'est un dico.
00:36:04 :Donc, on renvoie ça aussià son dico.Donc, du coup,on revient à la première itérationet il vérifie A,c'est un entier, 2.Donc, il prend 2,il rajoute à déjà 1,et ça fait 3.
00:36:21 :Et il sort de la boucle,et il donne le résultat.En gros, de toute façon,là, ce qu'il faut se dire,c'est qu'il va à chaque foisdescendre dans les dictionnaires.
00:36:33 :Justement, il va créer des piles d'appels.Et c'est quand il va arriveraux 4 bases que là,il va s'arrêteret qu'il va tout remonter.
00:36:43 :Mais il faut bien le décomposer comme ça.Par exemple, tout à l'heure,je vais garder mon exempleparce que je vais faire un repo,si ça vous intéresse.
00:36:51 :Je vais le recopier.J'avais un exemple,celui-là, que j'avais tout à l'heure.Je vais noter en détailce qu'il se passe.Hop !Avec la liste.
00:37:03 :Ici, c'est une récursivité,donc ça marche pareil.Ça marche pareil.Ce n'est pas le même type d'exercice,mais la compréhension va rester la même.Ici, là, j'avais tout écritpour que ce soit bien clair.
00:37:17 :Même moi, quand j'en fais,j'ai besoin de tout m'écrirepour être sûr de ne pas me gourer.J'ai bien le premier appeloù j'envoie toute ma liste.
00:37:26 :Ensuite, là, 1,il va être ajouté ici à flat.Ensuite, pour 2, 3, 4,je vais avoir un autre appel récursif.Le deuxième appel récursif,qui va se faire là,il va ajouter 2, qui est là.
00:37:43 :Après, on va encore utiliser la récursivité.On va envoyer 3 et 4 qui restent ici.On est là.Boum ! 3 et 4.Ici, on ajoute 3 et 4 directement.
00:37:52 :Puis là, en fait,arrivé au cas de base,boum !T'as un piton qui va remontertoute la liste d'appels.On va arriver là, au troisième appel.
00:38:00 :On va retourner 3, 4.Ici, on va ajouter le 2 qu'on avait.Et ici, on va ajouter le 1 qu'on avait.Et on va avoir notre liste aplatie.
00:38:08 :Mais ça, je vais faire un repo, à la limite,si vous voulez,pour le relire tranquillement.Il n'y a pas de soucis.Tu peux nous envoyer le lien.
00:38:19 :Ouais, le overflow,c'est un stack overflowqui a son DC, en fait.Enfin, sur ce concept-là, en fait.Après, piton,honnêtement, je n'ai jamais essayé.
00:38:33 :Je n'ai jamais créé de bug comme ça.Donc, c'est pour çaqu'il y a le cas de base et le cas récursif.Et logiquement,enfin, logiquement, c'est comme ça,piton gère,quand il y a trop de récursivité,il y a une récursion erreur des têtes.
00:38:47 :Et je crois même qu'on peut,s'il y a trop de cas de récursivité,il va y avoir une erreur.Et si je ne dis pas de bêtises,c'est même quasiment sûr à 100%,on peut régler, en fait,le niveau de la récursion.
00:38:59 :Ça se règle, ça.Oui, j'ai déjà eu à le faire pour un projet.J'ai dû augmenter le taux de récursion,sinon ça ne passait pas.
00:39:07 :Ça plantait.Le taux de récursion de base,il est vraiment bas, en fait.Avec les PC qu'on a maintenant,ils sont capables de gérer pluset on est obligé d'augmenter la limite,sinon on est très, très vite coupé.
00:39:18 :Oui.Et alors, après, il y en a,il faut toujours la question,mais du coup, c'est quelque chosequi va être super et qui passe en mémoireet pas forcément,ça bouffe de la mémoire.
00:39:29 :Forcément, à chaque récursion,tu recrées une fonction,donc tu reçois une fonction en mémoire,donc déjà, rien que ces objets créés.Ça va, après, toutes les piles,elles vont s'empiler,elles vont s'empiler,donc oui, c'est ça.
00:39:46 :Donc, voilà.Je prévois, du coup,les data classes pour le prochain,parce que finalement,on est resté un moment sur les récursions,quasiment un bon 25 minuteset ça s'est passé vite.
00:40:00 :Est-ce que ça vous a plu ou c'est...Oui, oui, c'était utile.C'est gentil.Donc, ça, c'est...Surtout, il faut bien préciserqu'il faut régler le premier appel,enfin, le camp de base.
00:40:18 :Oui, carrément, oui.Il faudrait que la fois ça,on va voir son cas de base.Le cas de base.Bon, le mécanisme est clair maintenant.
00:40:27 :Nickel.Nickel.Donc, j'avais un doutesur la façon dont vous pouvez le régler.Je regarde, je ne sais pluscomment on peut régler le cas de profondeur,mais sûr qu'on peut le faire,mais je ne sais pas comme ça,en tête, comme ça,ça ne ferait pas le sens.
00:40:43 :Je t'avouerai que quand j'ai eu le plus qu'à le faire,c'est le terminal qui m'a renvoyé l'erreur.Oui.J'ai fait Google is my friend,j'ai regardé la commandepour modifier le niveaupour pouvoir passer le projetque j'étais en train de travailler.
00:41:00 :Et après, j'ai remis à l'état de base.Et puis voilà.Oui, oui.Il y a Baptiste Ficot qui a bossé dessus aussi.Mais c'est intéressant.
00:41:10 :Moi, la recursivité,la première fois que j'ai l'utilisé,je n'avais vraiment rien compris.J'avais regardé à la fin,je me suis dit, mais qu'est-ce que c'est que ce truc ?
00:41:17 :Je ne comprendrais jamais de la vie.Et en fait, vraiment,rien que ce cas-là,par exemple, ici,où je me suis tout détaillé,ça, j'étais tombé sur un défioù il fallait faire ça.
00:41:26 :Je l'avais réussi,mais je ne sais pas comment.C'était quasiment exactement celui-là.Pas à peu près de choses.Une chose près, peut-être.Et en fait, après,je m'étais bien écrit justementce que ça fait.
00:41:39 :De toute façon,vous pouvez demander toujours à INIA,tout en croisant les infos,mais à peu près,si vous détaillez aussi ce que ça fait.
00:41:46 :Mais voilà.Oui.Mais donc,comment doit-on réfléchir ?Je veux dire,quand se dit-on,je ferais mieux d'utiliser la recursivitéou alors ce n'est pas la peine ?
00:41:55 :Où est-ce qu'on peut s'en passer ?Je ne sais pas.Par exemple,tu as un cas où...Est-ce qu'on aurait pu faire autrement,par exemple,ce truc-là ?
00:42:05 :Comment tu aurais pu le faire autrement ?Avec Python ?On aurait pu quand même.C'est plus compliqué,mais on aurait pu, non ?Oui, si, si,tu aurais pu.
00:42:14 :C'est grâce à laquelle,une deuxième fois,sur...Oui, oui.Tu peux...Tu as toujours plusieurs façons de faire.Là, oui,tu pourrais le faire,mais je pense que ce serait un peu plus galère.
00:42:25 :Et je me demande, attends,s'il n'y a pas un truc,quelque chose de beaucoup plus simpled'intégrer à Python ?Là, c'est vraiment pour la recursivité ?
00:42:35 :Je me demande s'il n'y a pas un trucdans les EtherToolsou les collections ?Oui, c'est ça.Il y a plein d'usages là-dessus,cet après-midi,et il me semble qu'il y a...
00:42:42 :Je me demande...Pour Pondéko, par exemple,ce serait un chainmap ?Enfin, oui.Ma question,ce n'était pas tellementcomment on peut faire,mais c'est...
00:42:53 :Quand doit-on penserà la recursivité ?C'est un peu le...Est-ce qu'il faut l'envisager d'office ?Non, pas forcément.Tu ne l'envisages pas d'office.Mais, oui,j'ai vu une...
00:43:07 :Tu ne l'envisages pas d'office,c'est que là, par exemple,ça,quand je suis tombé sur ce cas-là,je ne sais pas,moi, ça me paraissait normald'avoir de la recursionpour aller...
00:43:17 :Enfin, normal.Ou pas.Après, il y en a qui aurontplus optimisé.Mais ça me paraissait plus naturelpour moi de me dire,on va aller en recursion,on va d'abord rentrer dans une listeet après, on va rentrerdans chaque liste.
00:43:28 :Ça dépend de l'algo.Quand on voit des encapsulationscomme ça,c'est là qu'il faut...L'algo qu'on va te présenterou ce genre de choses-là,oui.
00:43:37 :Là, je regardais,il y en a qui font ça,par exemple,avec une boucle wild,oui, par exemple, aussi.Je regarde un peu sur Internetce qui se faisait.
00:43:45 :Oui, c'est vrai,j'ai pas pensé,mais une boucle wild,ça peut très bien le faire.Avec du pop,une instance aussi,oui,puis il y a des reverses.
00:43:55 :Mais je trouve que c'est plus simplede le faire en...Pour moi,je trouve que c'est plus simplede le faire en recursion,après.Donc, voilà.
00:44:03 :Pascal,je pense que quand t'écriston code,c'est pas tellement de savoirsi c'est la règle ou la normed'utiliser la recursivitéou toute autre méthode.
00:44:13 :C'est surtout d'utiliserce que tu maîtriseset ce que tu comprendssur le moment.Tu vas être capablede gérer de A à Z, en fait.
00:44:21 :Oui.Mais c'est bien de se dire,ah tiens,ça c'est un casoù la recursivitésemble s'imposer, quoi.On avait fait le travailavec Gab.
00:44:34 :Il y avait des exercicesde docstringoù, en fait,j'étais partisur un module de collection.Ah oui, oui.Par contre,on pouvait le faireavec des boucles fortes.
00:44:44 :Et au bout du compte,on obtient le même résultat.Mais ce n'est pas pour autantque c'est mieuxde le faire avec du fortou avec...
00:44:53 :C'était du counter,je crois, si je me souviens.Ce n'est pas la question en soi,la question,elle est surtoutque tu comprennesce que tu faiset que tu le maîtrisesdans ce que tu fais.
00:45:04 :C'est tout çaqui va compter au bout du compte.Après, avec l'expérience,plus tu vas connaîtrede modules et de trucs,plus tu vas utiliserdes outils plus optimisés.
00:45:12 :Par exemple,IterTools,quand tu as l'itération,ça m'aurait bien aidéau tout débutquand j'ai commencé.Je ne le connaissais pas maintenant.C'est assez cool.
00:45:21 :En gros,personne ne t'enverra en prisonPascal,si tu ne fais pasune récursivitéalors que tu auraispu le faire.Oui,je me mets à ma place.
00:45:32 :Effectivement,quand on cherchela solutionla plus courte,la plus rapide,c'est avoir le réflexede la récursivitési ça peut être utile.Ça, ça vient avec le temps.
00:45:44 :Il y a des problèmesqui sont naturellement« récursifs »quand tu le vois.C'est vrai qu'il y en aque je regardais.J'ai vu des testspour le Toza,les suivisdes Fibonacci,tout ça.
00:45:57 :Oui, par exemple.Je ne suis pasun pro des maths.Je ne suis pas un prodes maths,mais ça,tu peux te direqu'en récursivité,ça peut être pratique.
00:46:07 :Pourquoi pas ?Pas obligé,mais ça peut l'être.Comme là,tu avais une structureassez récursive.Tu avais des listesdans une listedans une liste.
00:46:16 :Moi, c'est un peu comme çaque je fais.C'est quand ça me paraît naturel.Et puis après,je réfléchis un peu aussi.Est-ce que je fais çaou je me documentesur Internet ?
00:46:24 :Ça dépend, en fait.Ça dépend.Oui, OK.Donc, voilà.Écoutez,on fera les data classesla prochaine fois du coupparce qu'on n'en a pas parlé,mais j'avais préparéun petit truc aussi.
00:46:38 :Moi, je ne serai pas làla semaine prochaine,mais ça sera celle d'aprèsencore du coup.Je suis en vacancesla semaine prochaine.Donc, voilà.
00:46:51 :Écoutez,je vous remercie.C'était une erreur peut-être.La main s'est levée,mais elle s'est vite baissée.OK.Pas de problème.Écoutez,je vous remercie touset puis j'espère vraimentque...
Aucune occurrence trouvée pour « ».
00:00:30
Discussion sur le portfolio en ligne et son développement
00:01:24
Introduction à Django Components
00:03:09
Structure et configuration des projets avec Django Components
00:04:45
Composition d'un composant avec Python, HTML, CSS et JavaScript
00:06:05
Gestion des médias avec des composants dans Django
00:08:48
Utilisation du contexte avec les modèles Django
00:14:29
Présentation sur la récursivité et explications
00:17:39
Exemples pratiques de récursivité avec listes et dictionnaires
00:26:10
Exercice: Somme des entiers dans un dictionnaire imbriqué