Session du 25 mars 2025 à 21h00
Bases du Langage
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
Comprendre les générateurs et itérables Python
Introduction progressive aux générateurs à partir des itérables, listes, chaînes de caractères et compréhensions en Python, avec des exemples concrets.
00:00:00 :Voilà, c'est parti. Donc bonsoir à ceux à qui j'aurais pas dit bonsoir. Je crois pas avoir salué tout le monde, j'ai un doute.Peut-être pas, Arcel. Il me semble que t'es arrivé discrètement. Je suis pas sûr de t'avoir dit bonsoir, Arcel.
00:00:14 :Bonsoir.Bon, donc on va lancer le petit mentorat de ce soir sur les générateurs. C'était une demande qu'on m'avait faite. Je ne sais plus qui me l'avait demandé, mais peu importe.
00:00:27 :Ouais, c'est moi. C'est l'ILC, ouais. Ils ont tous les cas d'application, quoi, en fait.On va y venir.Ouais, merci.Là, ce que j'ai fait, c'est que j'ai mis une confise. Si vous avez des questions dans le chat, vous pouvez les poser. Je verrai.
00:00:43 :Maintenant, n'hésitez pas à m'interrompre à la volée. J'aime autant. Je trouve que c'est beaucoup plus fixe.Il y a un truc qui vous perturbe, quoi. Vous n'hésitez pas. Vous ouvrez votre micro, vous posez la question et j'essaie d'avoir Arcel.
00:00:56 :OK ? C'est bon pour tout le monde ?Yes.OK. Alors, les générateurs. Gros sujet. Enfin, gros sujet, non. C'est pas non plus hyper complexe, mais c'est vrai que la manière dont c'est construit, c'est perturbant.
00:01:11 :Et c'est vrai que tout le monde a un petit peu de mal, généralement, au début avec les générateurs.Donc, on va essayer de démystifier un petit peu tout ça rapidement et de reposer sur tous les bases.
00:01:21 :Pour parler des générateurs, on va d'abord parler des itérables. D'accord ? Alors, comment vous définiriez un itérable ?Quelque chose qu'on peut lire avec une boucle forte, par exemple.
00:01:38 :Voilà. Par exemple. Alors, je vais vous partager mon écran.Est-ce que c'est bon pour vous ? Est-ce que vous voulez que je mette un petit peu plus gros ou de la taille ça va ?
00:01:56 :Ça va. Ça va, merci.OK. Donc là, typiquement, j'ai une petite liste. OK.Donc, une liste est un itérable. Donc là, si je fais une boucle avec le print i, hop, je lance ça.
00:02:12 :Effectivement, il m'affiche bien les différents éléments de la liste parce qu'il a pu parcourir chaque élément de la liste.Donc ça, c'est un itérable. Mais dans le même sens, une compréhension de liste, c'est aussi un itérable.
00:02:30 :Puisque la compréhension de liste va avoir un petit côté fonction, on va dire, puisqu'il va nous créer une liste selon des paramètresen bouclant sur un autre itérable. C'est pas forcément une liste. Ça peut être un dictionnaire, ça peut être d'autres choses.
00:02:49 :Et il va donc recréer une liste. Donc la compréhension de liste va être également aussi un itérable.Tout ce qui est des itérables, on va appeler ça plus généralement, dans le langage python, des containers.
00:03:03 :Alors, est-ce que vous pouviez citer quelques types de containers ?Vas-y, Arcel.Je pense que dans le container, on a, par exemple, les sets, des listes, des dictionnaires aussi, et les tubes.
00:03:24 :Voilà. Et on a aussi leurs sous-variants, comme les dk, les frozen sets, les dphonic, les ordredic, les counter, les numtuple.Il y en a un que vous m'avez pas cité. Il y en a un que vous utilisez très souvent.
00:03:42 :Le range ?Non.Les chaînes de caractère.Voilà, les chaînes de caractère, exactement.Ah oui, OK.Les chaînes de caractère sont aussi des containers, puisqu'une chaîne de caractère est un itérable.
00:03:54 :Alors, je vais faire ça, par exemple. On va laisser l'espée.S'il y a la place, je me mets une chaîne de caractère bonjour, que je lance.
00:04:07 :Effectivement, il va appuyer bien chaque lettre du mot bonjour, comme il l'a fait précédemment pour la liste.OK ?Donc, c'est aussi... Ah, j'avais pas vu Baptiste, ton commentaire, dans le chat.
00:04:23 :Donc, oui, les chaînes de caractère sont aussi des itérables.Donc, la première caractéristique qu'on a vue qui définit un itérable, c'est celle de pouvoir boucler,et donc des containers en eux-mêmes.
00:04:41 :Mais qu'est-ce qu'elle est leur autre caractéristique à ces containers ?Qu'est-ce qu'on va pouvoir exécuter comme opération de suite ?Je pense qu'on peut étirer sur chaque élément.
00:05:05 :Oui, alors ça, c'est la première fonction.Modifier et supprimer ?Ouais, aussi. Mais celle à laquelle je pensais surtout, c'est on peut vérifier les appartenances.
00:05:19 :D'accord ?Donc, voilà un autre petit exemple.Là, je vous ai créé trois types de containers.Une liste, un tuple et une chaîne de caractère.
00:05:36 :Comme vous pouvez le voir...Je vais effacer ma classe animale après.Là, par exemple, je vais pouvoir vérifier si 1 est dans la liste ou si 4 n'est pas dans la liste,si 1 est dans le tuple ou si 4 n'est pas dans le tuple,si V est dans la chaîne de caractère ou A n'est pas dans la chaîne de caractère.
00:05:59 :Donc là, si j'en sous-describe, forcément, la surprise n'est pas bien grande.On va avoir bien des troupes et tout.Faites pas attention aux falses, c'est ce que j'ai fait pour la classe animale tout à l'heure.
00:06:10 :Voilà.Mais comme c'est les containers, je vais supprimer ça, voilà.Hop.Ça, ça va, c'est pour mon raccourci, mon visionniste de code.Je sais pas pourquoi.
00:06:29 :Voilà.OK.Le contrôle Slash ne fonctionne pas, c'est ça ?Non.Ouais.Il veut pas.Sur le Mac, je sais pas pourquoi il veut pas le prendre.
00:06:43 :C'est pas grave.Donc là, on est bien sur des itérates.Forcément, si je fais ça,vous voyez, il va bien itérer sur les différents éléments que j'ai créés.
00:06:54 :Donc, les deux principales caractéristiques qu'on va trouver sur un container,c'est qu'on peut vérifier une appartenanceet vérifier et itérer dessus pour afficher les différentes valeurs qu'il contient.
00:07:06 :D'accord ?Oui.Maintenant, on va compliquer un petit peu ce vocabulaire.Tout cette notion de vocabulaire est assez importanteparce que c'est ce qui va vous permettre de bien comprendrece que sont les générateurs au final.
00:07:22 :Maintenant, on va réintroduire un nouveau mot.On va parler des itérateurs.Alors, quelle différence entre un itérateur et un itérable ?C'est là que ça commence à coincer en général.
00:07:44 :L'itérateur, c'est celui qui va permettre de scanner les éléments.Donc, par exemple, le fort, non ?Non.Non, c'est pas ça ?Alors, un itérateur, le plus souvent utilisé, c'est celui-là.
00:07:59 :C'est tout simplement itère.Alors, quelle est la caractéristique d'un itérateur ?C'est-à-dire qu'il va utiliser une sous-fonction.Donc là, comme la plupart du temps, c'est le next,pour parcourir la liste.
00:08:14 :C'est-à-dire qu'il ne va pas automatiquement parcourir l'ensemble de la liste,de l'itérable.Il va, au fur et à mesure qu'on va lui demander,afficher l'élément suivant de l'itérable.
00:08:28 :Donc, la différence qu'on va avoir, c'est que là,si je vais vous faire ça,alors, ça va, il n'y en a pas trop, donc on va aller assez vite.
00:08:37 :Avec le mot next, voilà.Et on va faire ça,or i, il, next,int, ici, voilà.Si je lance mon script ici,on va recommencer par comme ça.
00:09:02 :Voilà, ça sera un peu plus propre.Là, on voit bien que sur mon x, il a bien parcouru tous les éléments, sans s'arrêter.Sur mon y, il a d'abord affiché le 1,et maintenant, il attend que je lui demande d'afficher le deuxième.
00:09:18 :Si je fais ça,je relance mon script,là, ce coup-ci, il m'a bien affiché le 1, puis le 2,et ainsi de suite.D'accord.Voilà.
00:09:32 :Donc ça, c'est un itérateur, et c'est vraiment un type à part,parce que maintenant, si je vous fais ça,vous voyez bien la différence.Voilà.
00:09:46 :Vous voyez bien.Là, il me dit que c'est une liste,et le deuxième, il me dit que c'est un liste itérateur.Donc, un itérateur de listes.
00:09:55 :Encore.D'accord.Une petite question.Allô, Stéphane.Oui.Une petite question.En fait, les, quand même, les, les, les fours,les fours, par exemple,est-ce qu'ils utilisent à l'enter un littérable ?
00:10:14 :Je ne sais pas.Le fait que tu, il fait la boucle,il revient au suivant, à l'index suivant, à l'index suivant,est-ce qu'à l'enter, c'est l'itérable qu'ils utilisent ?
00:10:25 :Alors, non.Le principe de la boucle et le principe de l'itérateursont totalement différents.L'itérateur, il va avancer au pas à pas,et à l'enter, c'est l'itérable qu'il utilise.
00:10:36 :L'itérateur, il va avancer au pas à pasen fonction du nombre de fois qu'on va lui demander.La boucle, elle,c'est pour ça qu'on inclut dans les boucles fourset les boucles wild.
00:10:46 :Elles, elles vont parcourir l'ensemble des élémentsjusqu'à rencontrer un événement.Dans le cas de la boucle wild,c'est une condition qu'on va marquer avec le wild.
00:10:57 :Par exemple, on va marquer,je ne sais pas, wild i,i inférieur à 3,tu m'affiches le i dans la liste X.Donc là, quand il pense qu'il n'a pas rencontré cette condition,il va continuer.
00:11:17 :Et le cas de la boucle four,sa condition, c'est d'arriver à la fin de l'itérable.Il va continuer jusqu'à ce qu'il soit à la fin de l'itérable.
00:11:24 :Sauf si, bien entendu,dans ton four, tu as marqué ton marqué pour i et X.Voilà, si tu mets une condition à l'intérieur,if i supérieur à 1, par exemple,hop, break.
00:11:43 :Là, tu as créé une condition qui fait qu'il s'arrête devant la fin de la liste.Mais naturellement, la boucle,tant qu'il y a des éléments dans l'itérable,elle va continuer à parcourir l'itérable.
00:11:57 :OK ?D'accord, d'accord.Voilà.Donc, on continue là-dessus.Donc, un littérateur,il va falloir qu'on lui recommande à chaque fois un nextpour qu'il puisse commencer à avancer dans l'itérable.
00:12:23 :Avant qu'on voie les expressions génératrices,ce qu'on appelle communément les générateurs,je vais vous montrer une petite astuce,une petite différence qu'on va avoir sur les compréhensions de liste.
00:12:42 :OK ?Donc, je vais vous créer une petite compréhension de liste.Rapidement.OK.On va partir là-dessus.On va faire un truc très basique.Voilà.
00:13:12 :Donc, on est d'accord, ici j'ai une compréhension de liste.OK ?Si je demande le type de ma compréhension de liste,ça sera une petite astuce pour que vous voyiez un petit peu ce que c'est une fois.
00:13:31 :Voilà.Que j'affiche.Ici.Hop.Voilà.Ah oui, non.Je ne demande pas le type.Forcément, on affiche la liste.OK.Là, j'ai bien une liste.
00:13:57 :OK ?Voilà, je pense que tout le monde est en terrain connu.Alors, je ne sais pas si vous le savez,on peut faire aussi les entre guillemets compréhensions de liste,mais avec des sets.
00:14:12 :OK ?Donc là, si je fais print,le titre qui va ressortir, c'est quoi, à votre avis ?Un tuple, je crois.Tuple.Un tuple ?
00:14:29 :Là, ça devient automatiquement un itérateur.Ouais, presque.Ça devient un générateur.Générateur, plutôt.Ouais.Vous voyez ?Là, quand je lance, la classe est devenue générateur.
00:14:43 :Donc, attention avec les tuples,ils peuvent devenir générateurs.Si vous faites ce genre de choses.OK ?Vous voyez ?Ah, d'accord.Vous avez pu manipuler des générateurs sans l'âme de savoir.
00:15:00 :Je vous rassure, ce n'est pas réprimé par la loi,vous pouvez continuer.OK.Donc là, on a plutôt posé le profil,le décor par rapport à tout ça.
00:15:17 :Maintenant, on va arriver sur les générateurs en soi.Alors, quelle est la principale caractéristiqued'une fonction générateur ?Est-ce que vous le savez ?Je vais commencer en taper une.
00:15:36 :OK.Allez.C'est de pouvoir itérer en pas par pas ?Enfin, step by step, quoi ?Voilà.Alors, c'est ce que ça va faire, effectivement.
00:16:00 :Puisque la fonction génératrice va créer un itérateur.OK.Mais, voilà.Là, j'ai ma fonction.Et je vais m'arrêter ici.Alors, qu'est-ce qu'il y a ?
00:16:20 :Je vais faire une bêtise quelque part.Euh...Euh...Ah oui.Voilà.Si je ne mets pas ça, forcément...Alors, c'est ici que ça se passe.
00:16:40 :Qu'est-ce qui fait pour que je transforme cette fonction,qui est à la base une fonction un peu plus basique ?Là, si j'y mets un print i, tout bêtement,on est d'accord, ça marche.
00:16:51 :C'est une fonction.Il ne l'a pas fait, je ne sais pas pourquoi.Qu'est-ce qui pourrait faire que ça devienne un générateur ?Que ça me renvoie quelque chose ?
00:17:03 :Là, elle crée quelque chose, d'accord ?Donc, il ne faut pas me le renvoyer.Oui.Est-ce que ce que tu veux dire,renvoyer, c'est avec l'instruction return ?
00:17:25 :Là, ça ne returne rien, en fait.Voilà, c'est ça, ce qu'il a.On va utiliser le mot-clé yield,qui va être accord à l'équivalent du return.
00:17:37 :Ah, ok.Donc, si je fais yield,on va monter le chiffre au carré,il va s'amuser un petit peu.Là, maintenant, j'ai créé une fonction génératrice.
00:17:47 :Telle quelle,elle ne m'avance pas rien.Elle va pouvoir me permettre de créer une sorte d'objet.Ok ?Donc, on va créer un générateur.Voilà.
00:18:02 :Qui va être égal à ma fonction génératrice.Ok ?Et là, cet objet,on va afficher son type.Comme ça, on va voir exactement ce qu'il y a sous le capot.
00:18:17 :Alors.Je lance ça.Et là, il me dit bien que c'est une planche générateur.D'accord ?Comme on a eu tout à l'heure,avec la compréhension de liste,avec l'autopole.
00:18:34 :Ok ?Et là, pour afficher les valeurs,je peux soit boucler simplement cette liste,ou faire ceci.Ok ?Donc, le premier élément, c'est zéro.
00:19:12 :Zéro.On va orchestrer pour que ça soit quelque chose de visible pour vous.Voilà.Il me renvoie les éléments au fur et à mesure.Ok ?
00:19:25 :D'accord.Donc là, on utilise la méthode nexten version méthode magique sur le générateur.Ok ?Parce que le générateur va être capable de renvoyer une liste.
00:19:39 :Donc maintenant, ce qui va peut-être venir ensuite à l'esprit,c'est bien.On a créé une fonction génératrice.C'est un générateur.C'est super.Techniquement, elle peut même fonctionner comme une liste.
00:19:53 :Je vais boucler son générateur.Afficher mes éléments.Ça marche comme une liste.Pourquoi s'embêter à faire un générateur ?Pour finalement créer une listequ'on aurait pu très bien créer avec une simple compréhension de listeou en activant la liste de manègement.
00:20:24 :Puisque, au bout du compte, là, j'ai tapé quatre lignespour faire ce que j'aurais pu faire en une ligne.Est-ce que vous connaissez justement la principale fonction du générateur,la principale avantage ?
00:20:37 :Alors, j'ai une petite idée.C'est, par exemple, si on devait lire des données importantes.Si on utilise la liste, tout serait monté en mémoire,on pourrait après exploiter la liste.
00:20:56 :Et si on utilise le générateur,si c'est un fichier texte, par exemple,on va pouvoir avancer juste d'une ligne,faire le traitement et dans le next avancer la ligne suivanteou un caractère suivant.
00:21:16 :C'est ça l'avantage.En fait, le générateur ne va charger en mémoireque l'élément qu'il est en train de traiter.C'est-à-dire que, par exemple, une liste qui contient,disons, dix éléments, elle va occuper dix espaces mémoires.
00:21:36 :Mais un générateur capable de générer ces mêmes dix élémentsne contiendra à l'instant T qu'un espace mémoire.Le rapport que je vous dis n'est pas exact.
00:21:49 :C'est juste pour vous schématiser.Mais techniquement, c'est ça l'intérêt du générateur.Il va occuper moins d'espaces mémoires à l'instant T.Donc, comme le disait JC,notamment si à un moment ou à un autre,vous vous attaquez sur la site Data Science et ainsi de suite,quand vous avez commencé à traiter des data sets
00:22:11 :de un million de données,à économiser un petit peu la mémoire,vous n'allez pas le regretter.Ou alors, il va falloir que vous investissiez sérieusement dans la RAM.
00:22:21 :Donc, vous lancez votre programme le matinet puis vous attendez le soir que ça termine.Et là, l'ordinateur va commencer un petit peu à souffrir.
00:22:29 :D'accord ?Maintenant, cette fonction génératrice,elle peut se faire à l'infini.Ok ?Alors, je vais faire ça.Je vais vous montrer ça en éteint une petite sécuritéparce que j'ai pitié de mon mec.
00:22:50 :Allez.Je vais faire comme ça.Voilà.C'est où ?Ok.Voilà.On va subir un petit peu.On va faire ça.On va passer un paramètre là.
00:23:15 :Ok.Voilà.On ne va pas se compliquer trop la vie.Voilà.Et là, si je lance une boucle,ah oui, je ne fais pas ça, ça va quand même m'arrêter.
00:23:38 :Je vais faire l'erreur de base.Oui, il faut l'incrementer là.Voilà.Oui.Voilà.Voilà.Un peu de shadowing dans mes valeurs.Salut.Un peu moins de shadowing dans l'histoire.
00:24:15 :Voilà.Là, je vais lancer ça.Vous voyez, il m'a bien écrit 20 fois le même mot,le mot que j'ai renvoyé.Et en fait, il y avait bien un while true ici.
00:24:27 :Tant que la condition était exacte,lui, il renvoie les mots.Sauf que là, à l'instant T,je n'ai qu'une seule fois le mot bonjour en mémoire.
00:24:36 :Je ne l'ai pas eu une vingt fois.Oui, d'accord.En fait, le générateur va vraiment nous permettrede créer et générer des champs de données assez largessans occuper la mémoire en permanence.
00:24:55 :Quand vous aurez des data à traiter sur des grosses valeursou que vous ne connaissez pas réellementquelle va être la limite de cette valeur,c'est là que le générateur va rentrer en ligne de compte.
00:25:11 :Je vais vous donner un exempleoù j'ai utilisé le générateur dans un de mes scripts.Comme certains le savent,je fais de la forensic pour le jour.
00:25:22 :J'ai fait un script pour analyser des disques Linux.Et notamment, parmi ces fonctions de script,l'idée c'était d'analyser le disqueet détecter les fichiers qui étaient dans le disquejusqu'à ce que je trouve le bon.
00:25:37 :Vous imaginez bien que dans le disque dur de l'ordinateur,les fichiers ne sont pas qu'un.Pour mémoire, sur un ordinateur Windowsque vous venez d'installer,je crois qu'on est à presque 100 000 fichiers images.
00:25:52 :Je parle d'une installation.Vous avez installé des ROMs Windows.Enfin, les ROMs existent tous, autant pour moi.Vous avez lancé une installation de Windows,le disque est tout prêt, vous le démarrez la première fois,vous êtes déjà à 100 000 images.
00:26:05 :Vous imaginez le nombre de fichiers qu'il peut y avoir sur un ordinateur.Donc là, si je crée un scriptqui allait parcourir mon disque complet,me référencer,me garder une trace de chaque fichier existant dans le disque,je pense que vous pouvez assez facilement imaginerla taille de la liste que ça peut avoir.
00:26:27 :D'accord ?De toute façon, je n'ai pas besoinde savoir à la santé quels sont tous ces fichiers.Je cherche un fichier en particulier.Donc l'idée pour moi, c'est de boucler jusqu'à ce que je trouve ce fichier.
00:26:39 :Donc c'est là, c'est typiquement dans ce genre de casqu'un générateur fait tout son sens,puisque là, il va me charger en mémoirele premier fichier qu'il a trouvé,la référence de ce fichier.
00:26:52 :Il va vérifier s'il remplit la condition que j'ai posée.Je ne sais pas, par exemple,si c'est après le test de prothéisté.Si c'est le cas,là il a rencontré la bonne valeur,il arrête et il poursuit le reste de son programme.
00:27:07 :Si ce n'est pas le cas, il passe au suivant,mais le fichier qu'il m'a chargé,il n'y a plus de trace en mémoire des références du fichier.
00:27:14 :Est-ce que vous me comprenez ?Oui, oui.Et donc là, si je n'avais pas utilisé un générateur,je me retrouverais avec deux ou trois cent mille références en mémoirequi sont totalement inutiles.
00:27:26 :Et sur lesquelles je n'aurais pas forcément à revenir.Puisque le but de mon opération,c'était de rechercher un fichier précis.Oui, oui, oui.D'ailleurs,pour ma culture personnelle,si on n'utilise pas le générateuret qu'on utilise une méthode plus classique,comment ça réagit au niveau du système ?
00:27:56 :Ça va remplir le swap du disquepour préserver la mémoire vive.Si c'est un picon qui va décrocher,il y a un chien de garde quelque partqui va dire stopparce que le picon lui-même se protège ?
00:28:12 :Enfin, je ne sais pas.Non, il y a des mécanismes de sécuritéqui vont t'empêcher de dépasser la capacité de mémoire.D'accord.Le mémory overflow, un truc comme ça.
00:28:22 :Au bout d'un certain nombred'une certaine valeur de ta donnéequ'il est en train de traiter,le picon va s'arrêter lui-même.D'accord.C'est une mémorie buffer.
00:28:32 :J'ai déjà été sur certains programmes,il m'a fait un bon mémory buffer.Bon, on va changer de tactique.Du coup, ça se retranscrit par une exception ?
00:28:44 :Oui, ça va sortir une exception.D'accord.Donc, c'est gérable, interceptablepar ton application ?Exactement.Et puis, après,suivant le système OSque tu as sur ton PC,si c'est du Linux, notamment,il va utiliser Swap.
00:29:05 :Mac, je crois qu'il va utiliser Swap aussi.Maintenant, Windows a aussides Ibersys files qui lui permettentde stocker ce qu'il y a dans la mémoire vive.
00:29:13 :Oui.A l'origine, les Ibersys files,ils sont là pour garder la tracede la mémoire vive pour quand tu éteinsl'ordinateur ou quand tu l'enveilles, surtout.
00:29:23 :Oui.Mais dans la réalité, il va l'utiliser aussipour ce qui est un petit peude déplacement de mémoire.C'est vraiment un peu juste.Maintenant, c'est pas parce que tu as un Ibersys fileque dans l'ordinateur 4GH,tu te retrouves comme si tu avaisune Vigilia DRAM.
00:29:39 :Puisque la mémoirequi soit disponible est beaucoup plus lenteque la mémoire RAM.Oui, bien sûr.Mais il va pouvoir stocker temporairementdes fichiers dont il n'a pas besoinà l'instant T.
00:29:53 :Il sait dans ses sites de programmequ'il n'aura pas besoin de ces données-là.Il doit les conserver parce qu'il saitqu'il va en avoir besoin.
00:29:58 :Alors, attention, tout ça, ça se passedans le domaine de l'analyse.On n'a pas l'ordinateur,voire même beaucoup plus.Et donc, il sait que dans 10 millisecondes,il aura besoin de ce programme,de ces données-là.
00:30:10 :Mais il peut se permettre de les stockerdans un Ibersys fileet tant qu'il traite ce qu'il est en train de traiter.D'accord.Mais globalement,si tu traites un volume de donnéestrop important,site list ou dictionnaire,et que tu boucles dessus,le premier qui va tirer la sonnette d'alarme,
00:30:28 :c'est tout à fait.D'accord.Parce qu'en fait, il y a une valeurqui s'appelle...le Memory Buffer Overflow,si je me souviens bien,qui est plus ou moins communeà tous les systèmes,elle a encore plus ou moins différents noms,qui précise quequand tu commences à avoirun objet en mémoire
00:30:42 :qui est d'une certaine taille,tu dis stop, il y a erreur.Et donc, Python,sur la base de cette valeur-là,va te dire,ouh là là,tu as traité trop de données,versons, au moins, je coupe,je ne prends pas le risquede mettre le système en péril.
00:30:59 :Alors, cette valeur peut être modifiée,manuellement.Maintenant, vous vous en douterez,je vous conseille très fortementde jouer avec.Surtout si vous n'êtes pas sûrde ce que vous faites.
00:31:10 :Oui.Ok, ok.C'est important,c'est bien de savoir,parce que par,on va dire,par erreur de programmation,il y a quand même une sécurité,il y a quand même une sécurité,par...
00:31:27 :Oui.Tu ne pourras pas créerune liste qui par contre...Par l'interprèteur, quoi.Tu ne pourras pas ouvrir ta tour,mettre une camérapour filmer comment on prendune barrette de RAMsous l'effet d'une liste énorme.
00:31:36 :Non.Il y aura un système de sécuritéqui va s'arrêter avant.Ok, ça marche.Merci.Voilà.Donc,ce que je voulais dire,ça offre justementun bon avantageen termes de gestion de mémoire.
00:31:51 :Maintenant,ce qu'il faut prendre en compte,c'est que vous allez par contre perdreun peu en vitesse d'exécution.C'est-à-dire queles générateurs,il faut vraiment les utiliserque lorsque vous avez vraimentdes grands champs de donnéesà traiteret que vous ne voulez passurcharger votre mémoirede données qui ne seront pas utiles.
00:32:22 :Alors,j'ai noté iciun petit exemplepour vous donner un autre idée.J'ai trouvé ça.Donc, sur une séquencede 50 000 entiers,par rapport à une listede 50 000 entiers,le générateur va consommerque 112 octans de mémoire.
00:32:43 :Ok ?Quand la listeva stocker406 488 octets.Oui.D'accord.Je pense que là,l'histoire du gain de temps,le gain de taille,est évidente.
00:33:00 :Mais par contre,pour ce genre de chose,la génératrice va prendre41 millisecondesquand la liste prendraque 12 millisecondes.D'accord.Donc, le générateurn'est pas plus rapide,bien au contraire,mais il va permettrede ne pas usertrop la mémoire.
00:33:33 :Donc, c'est vraimentà réserverpour traiterdes grands volumesde données.Là, on ne veut pasfaire souffrirnotre mémoire vive.On ne peut pas prendre le risquede se prendre un memoryvector overflowou un truc comme çaavec le programme CAC.
00:33:50 :Il faut vraiment l'utiliserpour ce genre de casbien précis.Il ne faut pas l'utilisersystématiquementen disant« Ouais, mon programmeet mon scriptil va être trop fort,il ne va quasimentpas excéder le memory,il va être hyper efficace,hyper rapide. »
00:34:05 :Ah non.Au contraire,il va perdre plus de temps.Donc, sur une listede 10 éléments,un générateur,ça ne vaut pas le coup.Il vaut mieux restersur une liste classique.
00:34:17 :Ok.Voilà, voilà.Voilà un petit peuce que je pouvais vous diresur le générateur.Est-ce que vous avezdes questions ?Est-ce que ça vous sembledéjà plus clairque quand on a commencétout à l'heure ?
00:34:36 :Oui, oui, c'est bien.C'est bien, c'est bien.Il n'y a pas de questions ?C'est clair pour tout le monde ?Profitez,quand on est là,s'il y a d'autres questionsil faudrait du tempsd'y répondre.
00:35:02 :Parce que la séances'est marquée,les générateurs,vous avez le droitde poser des questionssur ce sujet-là.Oui.Oui, clairement.Si je reprendsl'exemple d'étuded'un fichier,c'est un gros CSVou un gros fichier de logqu'on veut analyser,qu'on veut parser.
00:35:27 :Clairement,c'est le générateurqu'il faut utiliser.On n'est pas spécialement pressé.On cherche des choses.Le fichier est énorme.Je dirais que justement,quand ta source de donnéesest externe,c'est-à-dire que tu n'as pasla maîtrise de cette sourcede données,et que tu ne connais pasla taille qu'elle sera,
00:35:49 :et surtout,tu sais que potentiellementelle peut être très grande,effectivement,il vaut mieux utiliserle générateur.Ce sera plus sûret ça éviteraque tu te retrouvesavec des problèmes de mémoire.
00:36:06 :Si tu maîtrises ta donnéeet que tu sais quece que tu vas traiterc'est une liste de 10 éléments,reste sur la liste.Le générateur,il ne va pas t'apporter davantage.
00:36:19 :Le checking,je suppose que c'estle découpage en morceauxJe suis en train de posterun bout de codesur le section Mentoraque j'utilise pour analyserdes fichiers de logApache et HAProxy.
00:36:33 :Effectivement,tu peux aussi direje prends les 10 premières lignes,je les traite,et si ce n'est pas ce que je voulais,je continue sur les suivants.
00:36:44 :C'est une autre technique aussi.Là, du coup,ce serait une liste.Tu peux faire des listesavec des découpages.C'est des extraits de fichierspar segment.
00:37:02 :Comme le système le permet,par exemple,quand on vérifiedes signatures Hdes disques,on a déjà parlé des Hpour les dictionnaires,mais je vais expliquer rapidement.
00:37:17 :Quand on fait des imagesdes disques,on va calculerce qu'on appelle un Hen MD5ou en SHA-1.Je pense que le MD5,vous avez déjà pu voircette valeur un peu barbareapparaîtrelorsque vous téléchargezcertaines ISO de Linuxoù on fournit un code MD5pour vérifier l'ISO.
00:37:35 :Qu'est-ce que c'estque ce code MD5 ?C'est un systèmede calcul bien spécifiquequi fait que lorsquevous avez un fichierqui contienttelle donnée précise,si vous passez ce fichierau travers de ce signequi est le MD5,vous allez obtenirune certaine valeur.
00:37:57 :Et si le fichiern'a pas été modifié,vous obtiendrez toujourscette valeur.Vous pouvez faire le calcul20 fois, 100 fois,vous obtiendrez toujourscette valeur.
00:38:05 :C'est ce qu'on appelleune valeur de H.C'est ce qu'on appelleaussi une signature numérique.Ce qui permet d'authentifierque les donnéessont bien fidèlesà ce qui a été proposéà l'origine.
00:38:14 :Quand on fait des calculssur des H,le disque,ce qu'il faut imaginerc'est qu'on va prendre,en fait, ce calcul,on va prendre en comptetous les bits du disque,donc tous les 0,les 1, etc.
00:38:24 :Et on va les prendreun par unpour les intégrerà son calcul.Et on va sortirce fameux H.Donc là,vous imaginez bienque sur un disquedéjà de 256 J,on a un petit peudes bits à calculer.
00:38:41 :D'accord ?Là, je vais typiquementutiliser du chunk-inpour prendre des portionsdu disquepour faire les calculset les intégrer au Hau fur et à mesure.
00:38:52 :Parce que sinon,je sais que ma mémoire,si j'y file un équivalentde 256 J d'un coup,mes 16 J de RAM,ça va vite craquer.
00:39:02 :Oui, parce que le fichiern'est pas considérécomme un flux.Il est considérécomme un blocdans sa totalité.Voilà.Dans ce cas précis,il est considéré comme un bloc.
00:39:19 :Ok.Oui, je comprends.Donc, il faut faire attentionsur des images disques.Si on veut faire le MD5,pour voir si l'imageest toujoursdans le même état,il faut faire attentionà la taille de l'image disque.
00:39:36 :Sur les programmesque vous allez utiliserpour faire du calculdu MD5 par défaut,vous allez fairederrière le rideau,il y a une logiquequi va faire ce checking.
00:39:47 :D'accord ?D'accord.Mais donc, vous,si vous allez récupérerun programme type Hcalc,il va faire le checkingdu fichier,il va s'en occuperpar vous-même.
00:39:59 :Moi, là, je le faisparce que je faisdes sites personnalisésoù, dedans,justement,je programmecet algorithme de checkingpour calculerl'âge du fichier.
00:40:09 :Et donc, j'ai déterminéles tailles des morceauxdu fichier à prendrepour calculerl'âge au fur et à mesure.Et l'idée, justement,de pourrir ma mémoire vide.
00:40:20 :D'accord.Oui, en tout cas,laissons...On rejoint dans tout çales mentoratsqu'on avait fait précédemmentpour ceux qui étaient làsur le garbage collector,l'IRUKH,on est sur la gestionde mémoireet faire en sorteque, justement,l'ordinateurne se retrouve pasen surchargede travailpar le script.
00:40:47 :Alors,ça ne va pas êtreultra importantet sensibleà chaque scriptque vous écrirez.Déjà, on est dans l'IRC,on se préoccupeun petit peu moinsde la mémoire.
00:41:01 :C'est quelqu'unqui gère beaucoupde choses pour nousà ce niveau-là.Et, de deux,avant que vous écriviezdes scriptsqui vont vraimentmettre en dangervotre mémoire vide,il va falloir attaquerdans la plupart des scriptsque vous allez écrirepour le moment,vous ne prenez pas trop le risque
00:41:18 :de mettre en dangervotre mémoire vide.Mais, il faut savoirque ça existeet, justement,connaître ces petites astucescomme l'IRUKHqu'il s'est évoqué,le garbage collectorou le générateurou d'autres chosespuisque ce ne sont pasles seules chosesqui nous permettentde gérer ça,il faut les connaître
00:41:35 :pour pouvoir se diretiens, ok, là,je vais me retrouverdans une situationun petit peu tendueen termes de gestionje vais utiliserun de ces outilspour éviterque mon programmesoit...
00:41:46 :Alors,ce n'est pas tellement lent,c'est surtout quesi vous surchargezvotre mémoire vide,déjà, avant de réellementla surcharger,vous devez mettreun petit peu de tempsparce queil faut...
00:41:57 :je prenais l'exemplede mon disquede 256 Godans la réalité VP,il n'a jamaisbalancé les 256d'un coupdans la mémoire videmais c'est justepour vous direque, voilà,si par exemplequand vous faitesun script,c'est un petit soucide savoir,il ne faut pas que
00:42:14 :quand vous lancezvotre script,toute la viede votre ordinateurs'arrête.C'est-à-direqu'il va vampiriserpar exempletotalement la mémoire videou la puissancede calcul du CPUet puisil leur resteun peu le faitd'ouvrir une pagechromesoldière en entier.
00:42:31 :Si à chaque foisvous faites un scriptc'est ça,alors si le butjustementc'est d'utiliserau max les ressourcesdu PCc'est ça.Donc,quand vous lancez ce script,il n'y a rien d'autrequi se fera à côtéet que même vous,vous n'allez pas touchervotre PC
00:42:47 :et vous le regardez faire.Pourquoi pas ?Maintenant,en règle générale,depuis le nombred'heures que je passedevant un PC,je peux vous le confirmer.
00:42:55 :Lorsque vous lancezune opération,vous regardezle programmequi tournemais pas tellementce qui vous intéressece qui m'intéressec'est le résultat surtout.Donc,quand vous attendezle dégâge,bien sûr,vous pouvez vous aimerpendant ce temps-làou mettre une vidéoou écouter de la musiquehistoire de passer le temps.
Aucune occurrence trouvée pour « ».