Session du 11 février 2025 à 21h00
TOSA & Certifications
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
Session de mentorat TOSA : "Les tables de hash python"
00:00:00 :C'est parti, c'est enregistre.Bon, alors, rebonsoir à tous.Donc, comme c'était annoncé ce soir, on va voir les htables en Python.Alors, à quoi ça sert les htables ?
00:00:16 :C'est principalement le truc que vous avez plus utilisé, je pense, tous qui utilisent les htables, c'est le dictionnaire.Alors, l'idée, c'est qu'à la fin de cette session, on vous répète depuis plusieurs temps avec Gabrielqu'un dictionnaire, c'est plus rapide qu'une liste grâce aux htables.
00:00:38 :Je pense que vous avez tous plus ou moins accepté l'information,mais là, ce soir, ce que je vais essayer de faire, c'est de vous expliquer le pourquoi.
00:00:47 :Le dictionnaire est plus rapide et comment ça fonctionne pour qu'il soit plus rapide qu'une liste, notamment.D'abord, on va commencer avec la fonction de hachage.
00:00:56 :Est-ce que vous connaissez tous un petit peu ce que c'est qu'une fonction de hachage ?C'est comme le MD5 ou des choses comme ça ?
00:01:06 :Voilà, exactement, oui.MD5SUM ou le chiffre 156, des trucs comme ça ?C'est l'idée.D'accord.Le hache, en informatique vraiment très générale, pas que en Python,d'ailleurs moi j'utilise professionnellement au jour le jour,c'est l'idée qu'au travers d'une certaine fonction avec divers algorithmes et autresque je ne détaillerai pas parce que c'est assez complexe
00:01:34 :et certaines parties sont même, on va dire, plus ou moins copyrightées,donc on ne les connaît pas toutes,vous allez prendre un fichier, un texte, un ensemble de données, peu importe,vous allez passer à travers cette fonction de hacheet ça va vous renvoyer un résultat.
00:01:52 :Le truc de cette fonction de hache,c'est que pour un fichier donné,s'il contient telle et telle et telle donnée,le hache qui va en ressortir sera unique.
00:02:07 :C'est-à-dire que si le fichier subit la moindre modification,le hache va changer.Et quand on parle de modification, on parle bien de modification de contenu,tout ce qui est métadonnées,donc la date de création, l'auteur du fichier,la machine sur laquelle il a été fait, et ainsi de suite,
00:02:26 :ça ne rentre pas en ligne de compte, ça garantit vraiment le contenu.Donc nous on l'utilise pour avoir des preuves numériques,on va extraire un fichier XY ou un ensemble de fichiers,on va les mettre dans un contenant type ZIP ou autre,et on va calculer le hache de ce fichier ZIP.
00:02:46 :Ça nous permet de certifier au niveau de la justiceque les données que nous on a extraites,la justice, quand eux reçoivent les données,ils peuvent recalculer le hache du fichier qu'on leur a donnéet voir que c'est bien le même hache que celui qu'on a indiqué dans notre rapport
00:03:01 :et donc s'assurer que ces données n'ont pas été modifiées entre-temps.Est-ce que c'est bon pour tout le monde ?Est-ce que vous connaissez l'intérêt du hache ?
00:03:11 :Alors maintenant je vais vous faire une petite démo sur le hache justement.Alors, pourquoi il ne me prend pas cette fenêtre ?On va la faire comme ça, c'est pas grave, je ne sais pas pourquoi.
00:03:34 :Je vais faire un nouveau fichier,je vais carrément passer par là, voilà.Alors, on va oublier un peu tout ça pour l'instant, voilà.Tac, hop, hop.
00:03:56 :Alors, donc on va utiliser le module hache librequi est inclus dans la librairie standard Python.D'accord ?Là, hop, en 256 ça va être mon autobus qui est dedans.
00:04:16 :Voilà.Je vais ouvrir l'autre fichier.Ici.OK.Voilà.Là, j'ai un fichier texte avec le mot « essai » écrit dedans, d'accord ?Là, qu'est-ce que je fais avec le hache libre ?
00:04:38 :Pas de souci, Camille.Ce que je vais faire avec mon module hache libre,je vais d'abord ouvrir mon fichier texte, je vais le lire.Alors, je pense que vous connaissez tous ce mode de lecture, PRB.
00:04:55 :Lecture, c'est read binary ?Voilà.Donc là, ça va lire vraiment les fichiers en type byte,les données en type byte du fichier, donc les 0, les 1.
00:05:07 :Je mets toutes ces données dans une valeur que j'appelle « data »parce que la fonction hache libre n'accepte que des ensembles de bytes.D'accord ?
00:05:15 :Et là, je vais lui demander, avec la méthode .sha256,je lui donne en entrée cette méthode,l'ensemble de bytes qui correspond aux données de mon fichier,de m'afficher ce qu'on appelle le « x-digest »,c'est-à-dire la valeur du hache en valeur hexadécimale correspondant à ce fichier.
00:05:40 :Donc là, je vais après.Au niveau de la taille d'écriture, c'est bon pour tout le mondeou il faut que je mette un peu plus gros ?
00:05:47 :Je pense que oui, c'est un peu plus gros, ça ira.Hop, voilà.Je lance mon petit script.Il a décidé de m'embêter ce soir, je crois.
00:06:02 :C'est pas grave.Ah ouais, alors attendez.Je pense que c'est pour ça que ça m'a posé un problème tout à l'heure.Donc on va relancer Studio Code.
00:06:18 :Voilà.Du coup, je vais vérifier ça pour voir si ça va mieux comme ça.Si c'est pas terrible la manière, hop, voilà.Non, bon, ça change rien, c'est pas grave.
00:06:35 :Je suis habitué au bug.Je vais m'adapter.Donc là, je lance.Ah ben non, il va toujours pas, c'est quoi ce truc ?Ben c'est tout.
00:06:48 :On va pas cesser de monter.On va pas cesser de passer sous le pan de charme.C'est les joies du direct.Voilà.Alors, d'accord, qu'est-ce qu'il y a ?
00:07:25 :Ah ouais.Terminal.Voilà, normalement.Ouais, par contre, c'est ça qui va poser le problème.Donc je vais redéplacer le fichier.Désolé pour les petits contre-temps.
00:07:40 :Mais mon Mac a décidé de faire greffe ce soir.Je ne sais pas pourquoi.Voilà.Ça devrait aller mieux.Ah oui, d'accord.OK.C'est bon.
00:08:14 :Voilà.Ça devrait aller mieux.Et...Je désactive mon environnement virtuel.Alors, normalement, si je charge mon fichier, mon Toro...Non, il ne m'a pas pris.
00:08:43 :OK, on est bon.Alors, si j'exécute maintenant mon fichier...Voilà.OK.Vous voyez qu'il m'a affiché un H ici.Je vais repasser en MD5 parce que c'est trop long pour que vous puissiez comparer au visuel.
00:09:10 :Je ne sais pas si j'ai un lag, mais en fait, on ne voit pas ton écran.Ah oui, pareil.Alors, on va recommencer.Voilà.Ça devrait aller mieux.
00:09:27 :Vous voyez là ?Ah, ça mouline.Oui, ça va aller mieux.Merci.Merci.Voilà.Donc là, je vais repasser entre temps à MD5 puisque justement, ce n'était pas top.
00:09:37 :Là, si je lance mon fichier...Vous voyez, il m'affiche...Ah oui, c'est là, je sais pourquoi.Attendez.Crac.Crac.Voilà.Ça va aller mieux comme ça.
00:09:54 :Voilà.Ici, vous voyez, il me ressort un H, d'accord ?Donc ça, ça correspond à mon fichier texte que je vous ai montré tout à l'heure.
00:10:04 :Je vais l'ouvrir à côté pour que l'on l'ait.Donc, c'est la signature du fichier texte.Voilà.C'est-à-dire qu'en fait, le fichier texte tel qu'il existe là,avec juste le mot « essai », vous voyez, il n'y a rien de plus d'affiché dedans.
00:10:20 :Ça correspond à ce H, là.Ok ?Je vais rebasculer dans le terminal ici pour que ce soit plus visuel pour vous.Voilà.Maintenant, si je modifiais mon fichier, je rajoute un espace.
00:10:34 :Vous voyez, trois fois même.Genre, je sauvegarde mon fichier.Donc là, déjà, j'ai modifié mes métadonnées de fichierpuisque forcément, la date de dernière modification n'est plus la même que tout à l'heure.
00:10:46 :On est bien d'accord ?Oui.Je relance mon opération.Là, vous voyez que mon H reste le même.Il y a un truc.Qu'est-ce qu'il m'a fait ?
00:11:03 :Ah oui, d'accord.Mon enregistrement ne s'était pas fait.C'est pour ça.Oui, à mon avis, oui.Et là, si je relance, normalement, il ne veut pas m'enregistrer.
00:11:16 :Bon, on va rajouter un mot, je ne sais pas pourquoi.Il ne veut pas m'enregistrer mon fichier.Voilà.Et bon, on y arrive.Donc là, je reprends ici.
00:11:36 :Vous voyez que le H a changé.D'accord ?Oui.J'ai changé les données dans le fichier, donc le H n'est plus le même.Si je le remets à l'état d'origine,c'est-à-dire que je supprime toutes les modifications que j'avais faites,et que je relance,s'il a bien pris en compte.
00:11:54 :C'est bon, normalement, il a bien pris en compte mon truc.On retrouve bien le H qu'on avait ici au début,puisque les données sont revenues à leur état initial.
00:12:07 :Donc le H va vraiment, en fonction de la valeur de votre donnée,avoir une valeur unique.D'accord ?Donc ça, c'est important que vous compreniez bien.
00:12:17 :Juste pour votre info, vous utilisez des H au jour le jour.Tous les jours, vous utilisez des H.Est-ce que vous savez dans quel domaine ?
00:12:30 :Peut-être pour l'emploi des médecins ?Pardon, je ne t'ai pas bien entendu, Arcel.Oui, je l'ai dit pour l'envoi de messages sur les réseaux sociaux.
00:12:41 :L'envoi de... Désolé, je ne t'entends pas très bien.En fait, je l'ai dit pour l'envoi de messages sur les réseaux sociaux.Oui, entre autres, mais ça en fait partie.
00:12:57 :En fait, vous l'utilisez tout simplement pour vos mots de passe.Ah, oui.Tous vos mots de passe, en fait, sont stockés H.Donc là, j'avais repris ici.
00:13:09 :Je vais vous remontrer ça.Voilà.Ici, c'est un mot de passe un peu bidon, d'accord,que j'ai transformé en byte.Ok ?Et si je vais voir dans la base de données,parce que j'ai créé ça dans un projet Djangosur lequel je suis en train de travailler.
00:13:29 :Dans la base de données, c'est ça qui apparaît.Correspondant à ce mot de passe-là.Donc là, on voit qu'on nous indique que c'est du SHA256.
00:13:36 :Ok ?Donc normalement, si on suit ce qu'il nous a expliquédans la gestion des mots de passe, d'accord,si je mets mon mot de passe comme ça en SHA256,je vais supprimer ici.
00:13:52 :Je vais commenter.Il ne faut pas qu'on ait deux valeurs.On est bien d'accord que je dois retrouver une valeur similaireà ce qui est marqué après le dollar ici.
00:14:04 :D'accord ?Et là, en fait, non.Parce que dans le principe du mot de passe,c'est toute la finesse du DH,il va vous rajouter ce qu'on appelle un SALT,comme du sel en anglais.
00:14:24 :C'est-à-dire qu'il va y avoir une clé secrèteque vous ne connaissez pas, que le programme connaît,mais vous non,qui va rajouter, insérer dans votre mot de passeun endroit particulierpour pouvoir créer ce hash de mot de passe.
00:14:41 :Alors le but, c'est quoi ?Simplement, c'est que,ce que je ne vous ai pas encore dit sur les hashes,c'est que, comme on vient de le voir,si vous passez une valeur X par une fonction de hash,MD5, SHA1, SHA256 pour les plus utilisés,vous aurez systématiquement le même résultat.
00:14:59 :D'accord ?Mais par contre,vous ne pouvez pas partir de la clé de hashpour retrouver la valeur.Ok ?C'est-à-dire qu'on peut vérifiersi telle valeur correspond bien à la clé de hash fournieet que c'est bien la même valeur d'origine,mais on ne peut pas partir de la valeur de la clé de hash
00:15:19 :pour récupérer la donnée initiale.Est-ce que c'est clair pour tout le monde ?Oui, c'est clair.Ok.Oui.Et donc, pourquoi, dans les systèmes de gestion de mot de passe,on rajoute ce petit site ?
00:15:32 :Donc là, c'est vraiment pour votre culture perso.C'est qu'en fait,à savoir qu'il existe ce qu'on appelle des rainbow tablesqui permettent,qui listent les mots de passe les plus utiliséset les hashes correspondants.
00:15:45 :Et donc, en recherchant,quand on trouve des hashes de mot de passe,si on ne rajoutait pas ce site,on pourrait retrouver les mots de passe d'origine correspondantsdans le cas où une base de données serait piratée.
00:15:55 :Ok ?Ok.Bon, c'était la partie qui faisait bobo à la tête.Je sais que c'est un peu complexe à comprendre.Après, si ça vous intéresse,je vous donnerai deux, trois petits liens de vidéosou autres que vous pouvez aller voir sur le sujet.
00:16:18 :Moi, je trouve ça assez passionnant,mais bon, j'utilise ça au jour le jour.Après, je sais que ce n'est pas forcément une grande passion pour tous.
00:16:25 :Oui, ça serait bien.Merci.Pas de souci.Donc, tout ça pourquoi ?Parce qu'en fait,notre dictionnaire,il va utiliser ce principe de hash.Alors, comment ça va fonctionner ?
00:16:39 :Je vais vous mettre des repères ici.Je vais supprimer tout ce qu'on a fait avant.Tac.Voilà.Le dictionnaire, il va utiliser des clés de hash.
00:16:52 :Alors, comment il va faire ?Vous savez tous qu'un dictionnaire,il va être composé de clés et de valeurs.Ok ?Merci.L'IA.Voilà.Donc, quand il va ranger ses valeurs dans la mémoire,ce qu'il va faire,c'est qu'il va utiliser la clé.
00:17:18 :Ok ?Il va la passer par une fonction de hash.Donc, il va trouver,mettons, sur la base d'un hdmd5ou d'une fonction personnalisée de hash,ce qui est plus souvent le cas dans Python,il va trouver une valeur qui correspond.
00:17:33 :Donc, vous allez avoir 10 entrées dans votre dictionnaire.Ça va lui sortir 10 valeurs.Ok ?Le problème, c'est que ces valeurs,ça ne correspond pas à des chiffres.
00:17:45 :Et s'il fallait qu'il enregistre 7 valeurspour savoir que ça correspond à la valeur,on ne gagnerait pas réellement grand-chose.Donc, qu'est-ce qu'il va faire ?
00:17:55 :Admettons, vous avez 10 entrées dans le dictionnaire.Ok ?Il va calculer les hash de chaque clé.Et ensuite, il va faire un modulodu nombre d'entrées.
00:18:10 :Par exemple, dans notre exemple, un modulo 10.Je vais vous marquer quelques valeurspour que ça soit un peu plus clair.Alors, tous les chiffres que je vais vous donner par la suitesont complètement au hasard.
00:18:24 :Je n'ai pas fait de calcul précis,je n'ai pas préparé un truc avec plein de calculs,et ainsi de suite.C'est assez hasardeux de retomber sur des bonnes valeurs.
00:18:31 :Donc, ne prenez pas les chiffres que je vais vous donnerpour argent comptant.C'est vraiment des chiffres pour l'image.Admettons, on va dire que par exemple,on va commencer simple.
00:18:43 :Je vais créer un dictionnaire comme ça.PyCharm ne va pas m'embêter.Ok.Admettons que j'ai une clé qui s'appelle prénom.On va faire très simple.
00:19:03 :Une deuxième clé qui s'appelle nom.On va faire très original ce soir.Et puis, je ne sais pas, mettons la ville de naissance.Paris.Voilà.
00:19:28 :Donc, qu'est-ce qu'il va faire ?Il va calculer dans un premier temps le H de prénom.Mettons, ça va arriver,on va être à, ça aura une valeur de...
00:19:39 :102.Ok.Le H de nom.Ça aura une valeur de 100.Et le H de ville, ça aura une valeur de 101.Ok.Là, maintenant, j'ai un dictionnaire avec trois entrées.
00:19:56 :Donc, il va m'avoir, par exemple,pré-empter trois entrées.Alors, il peut très bien, même si vous avez que trois clésdans votre dictionnaire, en pré-empter dix.
00:20:04 :Par exemple.On va partir, mettons, du cas qu'il en a pré-empter dix,ça va simplifier un peu les calculs.Pour chacun des résultats de H,alors, je vais remettre ça comme ça qu'on puisse...
00:20:14 :Moi, je suis dans le même ordre,donc on va faire ça ici.On va mettre en commentaire.Donc, on a dit 102.100.Et 101.
00:20:29 :Il va appliquer ensuite un modulo 10sur chacun de ces H qu'il a obtenus.Parce qu'il a dix emplacements.Ok.Donc là, le modulo 10, le résultat, ça va être 2.
00:20:48 :Le résultat, ça va être 0.Et là, le résultat, ça va être 1.On est toujours ok pour tout le monde ?Oui, c'est ok.
00:20:56 :Et qu'est-ce qu'il va faire ?Eh bien,à l'emplacement 0des cases qu'il a réservées pour sa mémoire,il va enregistrer que la clé est égale à nomet la valeur est égale à Dupont.
00:21:11 :À l'emplacement 1,il va enregistrer que la clé est égale à villeet la valeur à Paris.Et ainsi de suite.Et là où la puissance du dictionnaireva se révéler justement par le biais de ces tables de H,c'est que lorsque, par exemple,vous allez fairemondictac
00:21:34 :.getprénomEh bien, qu'est-ce qu'il va faire ?Il va calculer le H de prénom.D'accord ?Il va arriver à la valeur 102.Il va faire un modulo 10et il sait qu'il doit aller chercherla valeur de prénomà l'index 2de sa table.
00:21:55 :Ok.J'ai perdu tout le monde ?Ok.Et donc,c'est comme ça que va fonctionner le système du dictionnaire.Maintenant,là,on a pris des valeurs assez fixes,mais pour ce qui est des chaînes de caractère,par exemple, comme j'ai fait là,il ne va pas arriver sur une valeur 102.
00:22:25 :Ok ?Ce qui va se passer,c'est qu'il va calculer,il va prendre la valeur numériquede chaque lettrepour une chaîne de caractère,faire calculer un algorithmeet ressortir un chiffre.
00:22:37 :Par exemple,je crois que je peux le faire directement là.Oui, voilà.Si je fais un H de prénom,je vais l'imprimer comme ça,on le verra dans le terminal.
00:22:51 :Ah oui.Voilà.Il me ressort cette valeur-là.Alors, attendez,il y a quelqu'un qui arrive.Hop là, voilà.On revient.Donc, il me ressort cette valeur-là.
00:23:20 :D'accord ?Donc là,on va le faire pour les trois valeurs qu'on a là.Avec un peu de chance,on va voir ce que je recherche.
00:23:29 :H nom,ville,voyons voir ce que ça nous donne.Impeccable.Donc là,on a les trois H qui sortent.D'accord ?Si je fais mon module Odissede ces valeurs,en gros,avec un module Odisse,on va garder le dernier chiffrede chaque H.
00:23:50 :C'est bon pour tout le monde ?C'est bon pour tout le monde ?Oui.Qu'est-ce que vous observez làavec ces trois valeurs ?Est-ce qu'on ne va pas avoir un petit problème ?
00:23:58 :Il y a deux valeurs qui sont négatives.Alors, les valeurs négatives,ce n'est pas grave, ça.Ce n'est pas ça qui va poser problème.On fait un module Odisse.
00:24:10 :On va avoir deux valeurs égales, non ?On va avoir deux valeurs égales,exactement.Là, le premier,donc prénom et ville,on va avoir leur valeur 5.
00:24:19 :Sauf qu'on a dit que,dans une case,on mettait une valeur.D'accord ?Donc là, on va être embêté.Comment on résout le problème ?
00:24:28 :Ceux qui ont conçu ces HTablespour les dictionnairesont trouvé une solutionparce qu'en fait,ils sont partis du principeque déjà la probabilitén'était pas forcément extrême.
00:24:40 :D'accord ?Là, on a deux valeursqui ne se terminent pas de 5parce qu'on est parti sur un module Odisse.Après,dans le vrai fonctionnement de Python,on va dire,dans les dictionnaires,on ne va pas forcément êtresur des modules Odisse.
00:24:54 :On va avoir des variables,des valeurs,peut-être par champ d'hexadécimal,donc on aura peut-être des modules O16,ce qui va diminuer le nombre,le risque de valeurs égales.
00:25:03 :Dans le cas où on a une valeur égale,ce qui d'ailleurs,en langage propre au H,s'appelle une collision,ce que va faire Python,c'est qu'il va mettreles deux valeurs dans la même case.
00:25:16 :D'accord ?Il va faire ce qu'on appelleune chain list,c'est-à-dire qu'il va rentrer,il va prendre les valeursqu'on a ici dans cet ordre-là,il va calculer le H de prénom.
00:25:29 :Prénom va dans la case 5,donc il va mettre,dans la case 5,il va indiquer que c'est lié à la valeurclé prénom valeur genre.
00:25:38 :Quand il va arriver à ville,Paris,qu'est-ce qu'il va faire ?Il va mettreune listeoù en premier on aura prénomet en deuxième on aura la valeur ville.
00:25:51 :Ce qui fait que quand il va chercher,il va calculer son H,faire son modulo,avoir son indice,et il va arriver sur la case.
00:25:59 :S'il tombe sur une chain listet regarde la première,si c'est bien la clé qui correspondait,donc c'est pour ça qu'il stocke aussila valeur des clésdans les cases qu'on appelle buckets,dans le bucket,il stocke systématiquementla valeur de la cléet la valeur de la valeur,
00:26:19 :ce qui correspond à la valeur,pour pouvoir après utiliser ses chain lists.Donc il va utiliserle premier élément de la chain list.Est-ce que la clé c'est bien ville ?
00:26:29 :Non.Il passe à la deuxièmeet à ce moment-là,ah oui la clé c'est bien villeet il la récupère.Et donc voilà pourquoice qu'on vous expliquedepuis quelque temps,le dictionnaire est en O1par rapport à une listequi est en ON.
00:26:48 :Parce que pour faire cette recherche-là,même dans le cas d'une collision,honnêtement,pour tout ce que j'ai pu voirme documenter sur le sujet,quand vous arrivez à trois collisionsdans un dictionnaire,vous n'avez vraiment pas eu de chancesur le choix de vos clés.
00:27:05 :C'est une situation assez rare.Généralement,vous avez deux valeursdans une chain list,un roi,mais rarement au blanc.Ce qui fait quequand vous recherchezune valeur dans une liste,donc admettons,on a une liste,je vais vous la mettre comme çace sera un peu plus visuel pour vous,
00:27:31 :alors,j'ai le nom,le point de genre,voilà,vous avez compris ce que je voulais faire.Si je veux rechercherla ville,je veux savoirquel est le nom de la ville.
00:27:47 :Dans le cas d'une liste,le logiciel y va.Regarder la première valeur,vérifier si c'est la même valeur,vérifier si c'est la même valeur,vérifier si c'est la même valeur,vérifier si c'est la même valeur,vérifier si la première valeurcorrespondà la donnée recherchée.
00:28:04 :Si ce n'est pas le cas,il passe à la deuxième,il regarde si ça correspondà la valeur recherchée,ce n'est pas le cas,il passe à la troisième,ah, ça correspond à la valeur recherchée,donc il la prend.
00:28:17 :Dans le cas du dictionnaire,comme je viens de vous l'expliquer,il va calculer le h de ville,ça va lui donner la casedans laquelle se trouve la ville,et quand bien mêmevous avez une chain liste,au bout d'une deuxième itération,il récupère la valeur sélectionnée.
00:28:33 :Donc c'est uniquement pour celaqu'un dictionnaire est toujoursplus rapide qu'une liste.C'est parce qu'en fait,au lieu de regarder les valeursune à une,il va calculer le h de la valeuret savoir immédiatementdans quel indicealler rechercher la valeur.
00:28:53 :En termes de rapidité,si je faisais par exempleça, ma liste,je sors la ville aussi rapidementqu'avec icimon h de ville.D'accord ?
00:29:24 :Parce que tout simplement,le dictionnaire,au lieu de rechercher l'indice,enfin d'aller parcourirtoutes les valeurs qu'il apour savoir si c'est la bonne clé,il va calculer le h de la cléet grâce à ce h,il sait exactementà quel indicese trouvela valeur recherchée.
00:29:41 :Est-ce que ça vous sembleplus clair pour vous,ces notions de table de het dedifférence de rapiditéentre le dictionnaireet la liste ?
00:29:57 :Oui, si c'est plus clair,j'ai quand même une question.Oui, vas-y.Je ne sais pas,juste que là,ça n'a vraiment rien à voiravec la cybersécurité.
00:30:11 :Il y a un truc avec la cybersécuritéparce qu'en cybersécurité,on aune clé de hqui va permettrede chiffrer tous les éléments.Est-ce qu'avec le dictionnaire,on pourraitprendre la clécomme étantune clé de hqui va chiffrer carrémentla valeurqui la correspond ?
00:30:38 :Non, les clés de hne servent absolument pasà chiffrerou à crypter.C'est d'ailleurscet élémentqui est souvent un petit peuconfus dans l'esprit des gens.
00:30:55 :Je reprends l'exempleque je vous ai expliqué tout à l'heureavec les mots de passe.On a tendance à direpar abus de langageque dans les bases de données,les mots de passe sont cryptés.
00:31:07 :Ce n'est pas exact.Parce qu'en fait,comme je vous l'ai expliqué,ce qui apparaît dans la base de données,c'est la valeur de hde votre mot de passeà laquelle on a rajoutéune clé secrète.
00:31:25 :C'est-à-dire que la clé secrète,par exemple,je vais reprendre le mot de passeque je vous ai affiché tout à l'heure.Par exemple,le mot de passe à la base,c'est ça.
00:31:39 :La clé secrète,ça peut être tout simplementbonjour.Il insère bonjour au milieudu mot de passeet il calcule le h de ça.Lui, il sait quequand vous allez rentrervotre mot de passe,qu'il insère sa cléqu'il a déterminéeà tel endroit,il recalcule le h,
00:31:58 :il retombe sur le même hque ce qu'il a dans sa base de donnéeset il autorise l'accès.D'accord ?Mais le h ne sert pasà crypter en soi, en fait.
00:32:07 :C'est juste une attestationque la valeur est bonne.Comment je pourrais essayerde vous expliquer ça ?Alors, je ne sais passi vous avez connu ça,mais pendant un temps,il fallait que,par exemple,quand on avait un documentqu'on devait remettrequelque part,il fallait qu'on aille en mairie
00:32:31 :pour le faire,faire une copiecertifiée conforme.Est-ce que ça vous parle, ça ?Oui ?Voilà.En fait, on se présentaà la mairieavec le document originalet la copie.
00:32:47 :Donc, on voyaitl'officier d'état civil,il regardait les deux documents,il constatait que les deux documentsétaient identiques,il mettait son cachet dessus,il disait« je certifiecette copie conforme ».
00:32:57 :Le « H », c'est ce qu'il fait.C'est comme si,par exemple,mon texte que j'ai ici,j'allais à la mairie,le maire regardela valeur de mon texte,il dit « moi, je la certifieconforme,je lui attribue telle valeur ».
00:33:12 :Et ce qui fait quesi n'importe qui reprend mon texteet interroge la mairieoù je me suis présentépour vérifier le texte,il va dire « moi,je trouve telle valeur ».
00:33:23 :Et le maire, il va dire« ok, moi, j'ai bientelle valeur enregistréedans mes registres,c'est bien le bon texte ».Parce que vous comprenezl'intérêt du « H »,enfin le fonctionnementen soi du « H ».
00:33:33 :Oui, c'est très clair.C'est vraiment,c'est juste làpour attesterqu'une valeur,un jeu de donnéesdans ce qui nous intéresse,est bien identiqueet n'a pas été altérée.
00:33:48 :Et Python utilise çapour ses dictionnairespour dire « ok,la clé, elle est unique ».C'est pour ça qu'on vous parledepuis le débutde clé unique,parce que vous imaginez bienque si du coup,maintenant que j'ai expliquéces « H » là,si j'avais deux clés
00:34:01 :prénoms ici,ça posera un petit problème.D'accord ?Que fatalement,on retombe sur le même « H »,fatalement,on va avoir un problèmede collision,on va avoir une chaîne lissequi va se mettredans le dictionnaireet pour retrouver la valeur,ben, merci.
00:34:19 :Techniquement,avec la chaîne lisse,ce serait possible,mais ça va vite poser un problèmeparce que là,il ne saura pasquoi vous renvoyer.Donc voilà pourquoion vous expliqueque dans les dictionnaires,il faut absolumentqu'il y ait des clés uniques.
00:34:34 :Et donc je disais,là où Python l'utilise,c'est que lui,il atteste quela clé,elle a pour valeur prénomet moi,je lui attribue tel « H »et par rapport à mon algorithmeet mon modulolié au nombred'emplacementsdont je dispose,je l'ai placéà tel index,
00:34:51 :à tel indice.Et quand quelqu'unva interroger le dictionnaire,tiens,est-ce que tu ascette clé-làpourla retrouver ?Et là,le dictionnaire,il va calculer le « H »de la valeur que vous lui fournissez,il va voirsi ça correspondà son indiceet si dans l'indice,
00:35:13 :il a bien la bonne valeur,il vous dit,c'est bien ça.Et du coup,je vais glisser un petit peu,on a une solutionqui nous permet de gérerle cas où la clén'est pas trouvée.
00:35:27 :C'est laquelle ?On en a deux,techniquement.Le défaut dicte.Voilà,très bien,le défaut dicte,c'est surtout celle-làà laquelle je pensais.Et en fait,le défaut dicte,il va se réserverune casegénériquedans laquelleil va mettretous les « H »qu'il ne connaît pas.
00:35:57 :C'est-à-dire quesi le résultatqu'il obtient,ça ne correspond pasà un « H »,il sait qu'il doitrenvoyer la valeurde la case poubelle,on va dire.
00:36:08 :Ok.Donc voilà comment,en fait,ce qu'est le principedu défaut dicte.C'est-à-dire qu'il vase réserver une casede « H » poubelle,on va appeler ça comme ça,et si la valeurqu'on lui a rentréeau début ne correspond pas,il renvoie la valeurde la « H » poubelle.
00:36:27 :Voilà, voilà.Si on reprend l'exemplede ma listeindiquée de deux,c'est nous qui faisonsmentalement la correspondanceà la placede la table de « H ».
00:36:44 :Voilà.C'est ça.On lui dit,va chercher la valeurà l'indice deux.Ça lui évitede scruter la liste.Voilà.Voilà.C'est pour ça que là,pour les questionsque vous aurez en taux A,ça,ça,c'est duO1.
00:37:10 :Par contre,if« in list »« in list »Voilà.Voilà, c'est ça.« in list »« in list »« in list »Pardon.
00:37:30 :Voilà.Ça,typiquement,c'est du O1.Ouais.Et là, par contre,on sera toujours sur duO1.Ouais.Parce qu'en fait,ça,c'est le même fonctionnement que ça.
00:37:47 :C'est-à-dire qu'on va chercherun indice directement.Ouais.Ok.Donc vous comprenezpourquoi on parle justementd'O1 et d'O1.C'est aussi çaque je voulais vous fairece soir.
00:38:04 :C'est qu'en fait,c'est par rapportau mode de fonctionnementet à la fameusehashtag du dictionnaire.En fait,ça va beaucoup plus vitede rechercher parce quevous avez compris maintenant,je pense,le principe qu'utilisele dictionnaire pourrécupérer une valeur.
00:38:17 :Et donc, ça va très, très viteparce que lui,il calcule une valeur.Il sait que sa valeur,ça lui donne tel indice.Il va chercherla valeur correspondante.
00:38:25 :Merci.Dans une liste,par contre,vous êtes obligésd'itérer sur chaque élément.Alors, coup de bol,c'est le premier élément,ça va aller très, très vite.
00:38:37 :Par contre,si vous avez une listequi contient 5 millions d'élémentset que votre élémentque vous recherchez,c'est l'avant-dernier,avec les ordinateursqu'on a aujourd'hui,peut-être pas,mais vous avez presque le tempsd'aller vous faireun petit café.
00:38:49 :Donc, voilà, voilà.Est-ce que vous avezdes questions sur tout ça ?Alors, celui-là.Est-ce qu'il y a eubeaucoup de doliprane consommépendant cette présentation ?
00:39:10 :Non, ça va, ça va.Donc, en fait,le dictionnaire,la table de H,au fur et à mesurequ'on l'utilise,tout est déjà précalculé,les tables de H, en fait.
00:39:25 :Voilà.C'est ce qui va d'ailleursfaire aussi que,si vous voulez fairedes opérationssur une clé qui a une existence,ça va vous renvoyer une erreur.
00:39:33 :Oui.Parce qu'en fait,si vous voulez manipulerune clé inexistantedans un dictionnaire,donc il y a certaines opérations,lui, pour pouvoir faireson opération,il va calculer le Hde la clé que vous lui indiquez.
00:39:46 :Et puis, comme il ne va pastrouver de correspondancedans la table,il va vous renvoyer une erreur.Il va dire,cette clé-là,moi, je ne la connais pas.
00:39:54 :Donc, c'est pour çaqu'il faut avoir préalablementcréé une clé.Alors,vous allez être rarementconfronté au problèmeavec les dictionnaires,surtout en Python.Vous allez essayerde manipuler une cléqui n'est pas déjà crééeparce que Pythonest quand mêmetrès permissifsur la création de clésdans les dictionnaires.
00:40:15 :OK.Donc, généralement,vous rentrezdictionnaire entrecrochets,vous rentrez une valeur,égale ça,là, il va vouscréer la clé automatiquementet ne va pas vous poser de problème.
00:40:28 :Là où ça pourrait poser problème,c'est que si, par exemple,dans votre clé,la valeur, c'était une listeet que vous vouliezajouterune valeur à la liste,si vous faites mon dictionnaireentre crochets,la valeur, la clé,point append,et puis une valeur,là, ça va poser un problème
00:40:46 :parce qu'il ne va pas être capablede trouver la cléparce qu'elle n'existe pas.OK ?Oui.Donc,c'est pour çaqu'il y a quelques petitsartefacts comme çaavec les dictionnaires.
00:40:56 :C'est parce que, en fait,si la clé n'a pas été crééeau préalable,elle n'a pas été déclarée,il ne peut pas la manipuler.OK.
00:41:03 :Est-ce qu'on peut dire quepour gagner en performance,le dictionnaireconsomme plus de mémoiredu fait qu'il y ales clés, en plus,quelque part cachéesdans ce dictionnaire ?
00:41:18 :Oui.Donc,le dictionnaire consommeplus de mémoiredu fait qu'il y ales clés, en plus,quelque part cachéesdans son système.Oui.Mais dans le butd'être plus performant,on est bien d'accord.
00:41:30 :Alors,oui,il consomme plus de mémoirepuisque forcémentvous avez plus de valeurà renseigner.Maintenant,vu comment sont organiséesles mémoires vives aujourd'hui,je pense qu'il va falloirquand même manipulerdes dictionnaires énormesavant que vous le ressentiezréellement dans l'exécutionde votre script.
00:41:52 :D'accord.Techniquement,oui,il consomme plus de mémoire,c'est sûr.Maintenant,avant que ce soitun impact réelet que vous soyez obligéde micro-gérer cela,je pense qu'il y a le tempsde revenir quand même.
00:42:08 :Oui, oui.D'accord.Tu n'en es plus dans les années 90où on compte les optels.Voilà, exactement.Ok, je comprends.Ça marche.Merci.Je vois qu'il y en aqui rigolentparce qu'ils ont connu le cœur.
00:42:24 :Est-ce que vous avezd'autres questionssur le sujet ?N'hésitez pas,ou même sur autre chose.Moi, j'essaie toujoursde profiter des mentoratss'il y a des petites questions.
00:42:38 :Je vous présente un sujet,mais si vous avezd'autres questionsqui vous brûlent la langue,il faut y aller.Personnellement,je voudrais proposer quelque chose.
00:42:51 :En fait,c'est sur l'utilisationde la Synchro-Jompton.Oui.Je ne sais pascomment l'utiliser.On commence quand mêmeà en parler.Je ne sais pas commentl'utiliser.
00:43:09 :On commence quand mêmeà en parler.Je ne sais pas commentl'utiliser.On commence quand mêmeà en parler.On se préoccupe un peusur l'utilisationde la Synchro-Jompton.
00:43:21 :Tu voudrais qu'on fassequelque chosesur la programmationen Synchro-Jompton ?Oui.J'avais fait un sujetlà-dessus il y aquelques temps.J'avais fait un mentoratsur Docstream.
00:43:42 :Je ne sais passi tu étais là ou pas.Attends,on va essayerde retrouver ça.C'était sur Ascentio ?Oui.Attends,je l'ai peut-être noté.
00:43:58 :Je vais regarder.Tiens, hop.Voilà.C'était la sessiondu 18 novembre,Marcel.D'accord.Je vous jetteun coup d'œil.Alors,mon propos,c'est que si jamaisà l'issue de cette session-là,tu as encore quelques questions,n'hésite pas à m'envoyerun petit message en privé.
00:44:19 :Notamment en me disant,tiens,tel point ou tel point,j'aimerais bienqu'on le revoieou qu'on le développeun peu plus.Et moi,je suis tout à fait open.
00:44:28 :D'ailleurs,c'est valable pour tous.N'hésitez pasà me contacteren privésur Discord.Généralement,je réponds poliment,j'essaye.Non, je rigole.Au contraire,je suis preneur.
00:44:45 :Si on peut vous fournirjustement des mentoratsqui répondentà vos attenteset à vos questions,c'est le but.L'idée de ces mentorats,c'est vraimentde vous amenersur des sujetsqui vous intéressent.
00:44:57 :Donc,si vous avez des idées,n'hésitez pasà les proposer.D'accord.OK, merci.Alors,s'il n'y a plus d'autres questions,on va basculer vite faitsur la questionque JC m'avait poséeau tout début.
00:45:14 :On va regarder ça vite fait.C'est dans le module collectionsi je me souviens bien.Voilà.Si tu veux,il y a un code sourcedans la chaîne.
00:45:43 :Ouais, OK.Alors,quel est le problèmeque tu rencontresavec le chainmap justement ?En fait,on le voit dans la démoqui retirele premier dictionnaireavec la fonction parents.
00:46:03 :Ouais.Et en fait,j'ai pas vraiment respectéla même démarche,c'est-à-dire que j'ai crééun chaînagede deux dictionnaires,donc avec chainmap tout simple.C'est des fruits et des légumes.
00:46:30 :Et après,je crée un autreque j'ai appelé repas completoù j'y ajoute des fétulents.Du coup,après,je me dis,tiens,comment on va réagirle chainmap parent ?
00:46:49 :En lisant la doc,ça doit me retirerle premier dictionnaire.Or là,ça me retire pasle premier dictionnaire.Alors,est-ce que tu as affichéta chainmapune fois que tu avais fait ton ajout ?
00:47:08 :Avec un print ?Ouais.Oui.Et le dictionnairequi est venu en premier,c'était lequel ?Attends,je vérifie avant de te dire oui.C'est les friculents.
00:47:25 :Donc c'est normal.Alors que je l'ai ajouté après.Donc en fait...Et en fait,je vais regarderavant de dire une grosse bêtise.Mais l'ordre chronologiqueest bizarreparce qu'au départ,deux chaînes...
00:47:40 :Ouais.Alors fruits et légumes.Après,j'y ajoute friculents.Et en fait,donc friculents,chronologiquement,c'est le dernierqui a été ajouté.Mais en fait,effectivement,quand j'affichele chainmap,mes friculents apparaissenten premier.
00:47:56 :Et donc,quand j'appliquela méthode parent,il me retire les friculentsalors que je m'attendaisà ce qu'il me retiretout au début mes fruits.
00:48:06 :Alors en fait,si tu regardes au-dessus,avec la méthode Neutral,je pense que c'est ainsique tu ajoutes ton dictionnaire.Quand tu regardes biendans l'exemple que Thibaultil met dans Neutral,il crée sa chainmapavec fruits et légumes.
00:48:18 :D'accord ?Ensuite,il ajoute friculents.D'accord ?Et quand il l'affiche,tu vois que le friculentest venu se mettre en premier.Et chainmap parent,il retire le premier élément.
00:48:33 :Donc en fin de compte,tu as obtenule comportement logique.Tu vois ce que je veux dire ?Oui, oui, oui,mais moi ce que je pensais,je comprends,je vois que le friculentse retrouve en premier,mais je ne sais paspourquoi il se retrouveen premier parce que…
00:48:55 :Parce que c'est Neutralqu'il rajoute en premier,qu'il remet en position 1,en position 0 en fait.Oui.Et si tu rajoutaisun quatrième dictionnaire,mettons, je ne sais pas,boisson ?
00:49:09 :Une boisson, exactement,oui, parfait.Il retirerait boisson.Quand tu feraisun chainmap parent,ton boisson n'apparaîtrait pas.Alors c'est làoù j'ai eu du mal avec…Il faut faire attentionà l'ordre du construction en fait.
00:49:26 :Voilà.C'est comme avec…Alors en fait,si on reprend bienle principe de chainmapet quand tu voiscomment il l'affiche,c'est un tuple.D'accord ?
00:49:41 :C'est une forme de tuple,de liste.Et donc,l'ordre dans lequeltu ajoutes tes élémentsdans une listea une incidencesur le fonctionnementde la liste.
00:49:51 :Oui.Ok ?Là, avec chainmap,alors le comportementest un peu différentde la listedans le sens oùquand tu rajoutes un élément,au lieu de te l'ajouterà la fin,comme avec une liste,il te l'ajoute au début.
00:50:03 :Donc ça aura forcémentune incidencesur le fonctionnementde ta chainmap.Pour essayerde simplifier ça,admettonsque tu prends une liste.Alors, je vais essayerde rebasculer sur mon éditeur.
00:50:18 :Voilà.Comme ça, ce serait mieux.Tiens, on va gardercette liste-là.Hop là.Qui arrive ?Qui vient à partirde la fin ?Voilà.
00:50:30 :Salut, salut.Là, je prends ma liste.Ok ?Donc,je sais pas si t'asfait ton partage d'écran.Ah, j'ai pas faitmon partage d'écran.
00:50:42 :C'est exact.Là, j'ai...Hop là.Voilà.Donc là, j'ai ma liste.Admettons queje vais faire une fonctionaffichée.Ça prend en paramètrema liste.
00:51:02 :Et je vais mettreun printde liste.De ma liste, pardon.Tiens, j'ai...Là, on va laisser passercette liste.Parce que ça ne fait pasliste tout seul.
00:51:22 :Voilà.Donc là, je vais mettreliste arg.Et que j'affiche,donc, mes élémentstout saufle dernier.Ok ?Oui.Donc là,si je fais unaffichéliste ma liste.
00:51:42 :D'accord ?Que je lance mon truc.J'ai bien tous les élémentssauf le dernier.Sije faisunma liste.appendtestpar exemple.Et que je refais à nouveauun affichéliste ma liste.
00:52:03 :Là, tu vois,du coup, j'ai la villemais j'ai plus test.D'accord ?Donc là, c'est un fonctionnementde ma listeque je dois prendre en comptelorsque je décide de fairemes ajoutsou mes retraits de ma liste.
00:52:17 :Et bien, avec le chainmap,c'est la même chose.C'est-à-dire que commet'as tendu ditqu'il va rajouter le dictionnaireforcément en premier,c'est à toi de le prendre en comptequand tu vas utiliserune fonction parentesur chainmap.
00:52:30 :Parce que ça va influencerle résultat que tu vas obtenir.Et je te dirais que là,on touche mêmeà une grande questionqui existe aujourd'hui.
00:52:38 :À savoir,puisque c'est la semaineoù on en a beaucoup parlé,s'ILIA va remplacerles développeurs.C'est sur ce genrede petites chosesoù on estle développeur humainà son importance.
00:52:50 :Parce que là,c'est à l'humainde bien prévoiret bien envisagerle comportementqu'il va avoiret bien connaître son programmepour justement le coderde sorte à obtenirle résultat voulu.
00:53:01 :Et là,on est sur quelque choseoù on a une réflexionau niveau de l'humainqui se fait au préalable.Ok.Je n'ai pas trop suivil'actualitédu remplacement du développeur.
00:53:17 :Ok, je comprends.Voilà.Est-ce que c'est plus clairpour toi maintenantle problème de la fonctionchainmap du coup ?Oui, oui, oui.Il faut être très,très vigilantlors de la construction.
00:53:32 :Voilà.Quand tu construis ton truc,il faut vraiment le prévoirde sorte à avoirle résultatque tu voulais avoir.Il ne faut pas se direde toute façonje vais rajouter des trucset c'est celui-làque j'ai remis en premier.
Aucune occurrence trouvée pour « ».
00:36:00
Fondamentaux des tables de hachage et des dictionnaires
00:38:25
Gestion des collisions et performance en O(1)
00:40:20
Optimisation et consommation mémoire des dictionnaires
00:45:40
Utilisation avancée de ChainMap et ordre d’insertion
00:50:00
Manipulation des listes et impact sur ChainMap
00:53:00
Le rôle du développeur à l'ère de l'IA
00:54:10
Clôture et récapitulatif du mentorat