Session du 17 mai 2024 à 20h00
Structures de Données
TOSA & Certifications
Algorithmique & Performance
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 + Premium
Dans cette session, nous allons parler d'optimisation, notamment lors de l'utilisation d'itérables.
00:00:00 :salut Silas, salut Gab aussi qui vient d'arriver, salut Gab, salut tout le monde, salut Thibault,salut Alain aussi, je vais faire un petit message sur le discord, salut Alain, ça vaêtre intéressant ce soir vous allez voir, je vous ai préparé plein de petites questionslà, ah oui Ludo c'est toi aussi, oui j'avais jamais fait le lien entre la photo de profil
00:01:01 :que tu as, prochaine en juin normalement, ouais il y en a souvent en fait, elle a commencéà accélérer le rythme, ah oui, je discute pas mal avec des gars de ChikraCode du coupmaintenant et j'arrive à voir les dates en avance qui sont annoncées, du coup normalementau mois de juin il y en a une, ah oui c'est pas encore officiel, non on attend de savoir
00:01:29 :mais ça devrait se faire, vous avez rejoint depuis la page du site, je pourrais êtrebien sûr, ok il n'y a pas grand monde là, on va attendre un petit peu, est ce que vousavez eu l'occasion, je vais retourner voir là, c'est des semaines off, j'ai eu plein
00:01:58 :de taf, ok t'inquiète pas t'es pas le seul, il y a quelques-uns qui étaient un petit peuen retard, ouais Ludo, d'ailleurs c'est quand en juin, parce que ça se peut que je passeà Paris tout début juin, en tout cas ça va, il y en a beaucoup qui viennent aussi,
00:02:20 :ouais faut que je m'organise, ah ça y est, il y a des gens qui commencent à arriver,ah oui il est juste deux, ok j'ai commencé un petit peu en avance, alors ouais non çava vous êtes, je regarde Alain, oh ça va t'es pas trop en retard, tu sais c'est pas Alain,
00:02:52 :Albert, oui excuse, mais on fait ce qu'on a à l'aise, et puis c'est un imposteur, oui oui et puist'as juste Al, désolé, entre les pseudos, les emails et les noms, des fois je me plante, salutSimon aussi, bon on va rétendre encore un petit peu, les gens sont plus en retard que d'habitude,
00:03:17 :ok ça y est ça commence à arriver,bonsoir à ceux qui nous rejoignent, salut tout le monde, salut salut, alors on a un peu,ouais on a un mix, on a un peu un mix, du coup vu qu'on fusionne là pour le moment les sessions,ok Gab, je pense que ça sera difficile cette fois là, si je vais à Paris là ce sera plus au tout
00:03:57 :début du mois, ok donc on a pas mal de gens Thosa ce soir, cool, on va voir ce soir, on va repassercomme je vous avais dit, on va voir tout ce qu'est optimisation, mais on va aussi s'intéresser à,je vous avais dit qu'on repasserait sur les questions, là je vous en ai préparé plein,
00:04:13 :les questions que vous avez eues pendant les évaluations, ça va couvrir un petit peul'optimisation mais pas que, il y aura aussi un petit peu en vrac ce qu'on a vu sur lesdernières semaines, les dictionnaires, les types natifs qui sont intéressants avec lespetites particularités qu'on a vues, donc on va voir ça, est-ce que, alors je sais plus parce
00:04:33 :que je viens de me rendre compte que j'avais pas mis l'article sur les façons d'optimiserle code en public, mais je pense qu'avec le lien vous y avez quand même accès,alors je vais vous le partager, est-ce que vous avez vu, lu cet article-ci?
00:04:49 :Ouais, ouais, il était disponible alors, non? Toi Gab, ça dépend peut-être parce que tu aspeut-être des droits en plus là, ouais, non vous l'avez pas vu ok, donc c'est peut-être parce queje vous l'avais mis en tâche à faire, bon ok, bah c'est pas grave, de toute façon c'est un peu ce
00:05:11 :qu'on va voir ce soir, et je vais vous le montrer aussi, donc comme je disais, hop, on va passer enrevue plein de petites questions, ouais donc c'est ça, je vous ai préparé une petite dizaine dequestions qui viennent du coup du Toza, des évaluations que vous avez passées, ok, via le
00:05:34 :lien tu avais vu, Simon, ok, bon bah je pense que ouais, je pense que via le lien ça devaitfonctionner, ok bon on va commencer, au pire il y en a qui rejoindront en cours de route,on a une petite 8-10, ok, donc comme je vous dis, plein de petites questions, là vous voyez par
00:05:50 :exemple ça c'est de l'optimisation, ça c'est une question aussi je vous avais mis là dans les tâchesà faire, on a fait un glossaire sur all, Kevin l'a fait cette semaine, et c'est aussi le genre detruc qui n'est pas très compliqué à comprendre mais qu'on voit pas forcément, parce que des fois
00:06:06 :on n'en a juste pas besoin quand on fait pas ses propres modules, donc c'est pas un truc trèscompliqué mais c'est bien de le savoir, voilà on a des questions plus générales sur les sets, ça onl'avait vu pas mal, là encore optimisation, là aussi quelque chose de pas très très compliqué
00:06:23 :mais que soit les gens connaissent très bien soit pas du tout, là encore ça revient un peu sur cequ'on a vu sur les listes, ça c'est un concept un peu plus général aussi, je crois qu'on l'avaitdéjà vu celle-là ensemble, le any, all, ça on y reviendra aussi, il y a des formations là-dessus sur
00:06:41 :docstring si jamais vous ne les avez pas vu, c'est des concepts qui peuvent être un petit peu pluscompliqués des fois parce que ça fait interagir pas mal de choses sur les qu'est-ce qui est vrai,qu'est-ce qui est faux, false, ouais t'inquiète si là je vais zoomer après, là je vous fais juste un
00:06:55 :petit résumé vite fait mais les dictionnaires, donc création de dictionnaire, là qu'est-ce qu'on a,oui là encore quel est le moyen le plus efficace de concaténer des chaînes de caractère, celui-làje vous l'ai remis parce qu'il faut que ça rentre donc les types invalides on y passera 30 secondes
00:07:12 :là juste pour se remettre dans la tête, et le split aussi parce qu'effectivement on l'a vu et j'aimême moi-même appris quelque chose aujourd'hui, enfin aujourd'hui cette semaine, qu'il y avaiteffectivement quand même une différence entre le split de base comme ça et le split avec unespace explicitement indiqué, donc il y a une petite différence assez subtile, sournoise entre les deux
00:07:34 :donc on reviendra aussi là dessus, et du coup le 7 article, donc déjà est-ce qu'il y a desquestions sur le programme ou est-ce que tout est clair ? Il serait clair moi. Ok et on reviendra,
00:07:53 :n'hésitez pas à mettre ces pratiques, les petits emojis là ça permet de valider quand il y a desétapes comme ça, vous pouvez faire une petite réaction comme ça, je vois que tout le mondeacquiesce ou non. Tu n'y es pas encore sur le... sur quelle partie ?
00:08:14 :Tiens je remarque que j'ai d'ailleurs des nouveaux outils, ah ok ok du retard, oui oui alors il y ena quelques-uns effectivement qui sont un petit peu en retard là sur le Toza, il y a une personnequi est vraiment vraiment en retard mais j'ai vu avec elle et c'est qu'il est beaucoup occupé,
00:08:38 :il va reprendre le train, sinon les autres c'est pas c'est pas c'est pas catastrophique,et puis comme je disais au pire on rajoutera, on attendra un petit peu à la fin, ne vousinquiétez pas. Là on est encore dans des notions qui sont de la théorie semi de base,
00:08:54 :on va commencer effectivement dans une semaine ou deux à voir un peu plus tout ce qui estoriente-objet, un peu plus d'algorithmes etc et donc dans deux semaines là il faudra quand mêmeun petit peu rattraper le train mais vous avez encore un bon deux trois semaines pour reprendre
00:09:11 :les choses. Donc sur les opérations, déjà ça nous semblait important de faire un petit point,je vais zoomer aussi là dessus parce que c'est une notation qu'on voit souvent quand on parled'optimisation et qui n'est pas forcément très claire parce qu'elle n'est pas souvent expliquée,donc qu'est ce que veut dire le 0 n ou le 0 1, on a mis ces deux là, je crois pas qu'on ait mis,
00:09:31 :alors je pense qu'on a indiqué le log mais on l'a pas expliqué, oui voilà, ah oui si,il est là, vous avez log de n, il y a au moins une dizaine de notations comme ça pour lesperformances, donc des fois c'est n, des fois c'est 1, des fois c'est log de n, des fois c'est n,
00:09:48 :log n, plein de petits trucs comme ça. Donc voilà il y a plein de notations comme ça,mais celle qu'on voit le plus souvent revenir c'est le 0 n et 0 1, donc comme on explique icien long, en large et en travers, c'est que le 0 n, donc le 0 1 ça veut dire que ça ne va pas dépendre
00:10:08 :de la taille de votre élément, oui c'est ça, c'est le big O, effectivement. Donc 0 0 1 ça veut direque si vous avez une liste qui a 10 éléments ou 10 millions, ça va pas changer, 0 n c'est,donc le n signifie la taille de votre élément, donc ça veut dire que si vous avez une liste ça
00:10:29 :va être dépendant de la taille de votre élément. Donc 0 1 c'est ce qui est optimal généralement,parce que si vous avez une complexité de 0 1 ça veut dire que ça va être rapide peu importe,enfin ça va être rapide, ça peut être plus ou moins rapide mais ça sera pas plus lent en tout
00:10:45 :cas si vous avez un élément qui est de plus en plus grand, alors que 0 n si vous avez une listede 10 éléments ça va être rapide et si vous avez une liste de 10 millions ça va être plus lent,et ainsi de suite. Généralement plus la notation devient compliquée plus c'est long, donc si vous
00:11:01 :avez 0 log 2 n ça va être plus long que 0 n, si vous avez 0 n log n ça va être encore plus longque les autres etc. J'ai pas vérifié sur toutes les notations, il y en a d'autres qui sont encore
00:11:13 :plus compliquées mais que je crois pas qu'elles, ou alors c'est des cas très spécifiques dansPython où c'est utilisé, généralement on retrouve le 0 n ou 0 1. Est-ce que ça va jusque là?
00:11:24 :Ouais ça va. C'est bon. Vous avez une question non? Non? Ok. Donc ça voilà, vous faites pasavoir avec ça, je sais que des fois je vois des gens qui se mélangent un petit peu entre lesdeux et qui les inversent, donc vraiment 1 ça veut dire c'est toujours pareil et n c'est vraiment
00:11:50 :penser à n comme la longueur de l'élément et vous pouvez comprendre avec ça que voilà en fonction dela longueur ça va être plus ou moins long. Donc là vous voyez on a fait des petits exemples de
00:11:59 :différence entre 0 n ou 0 1, donc c'est pour ça qu'on vous dit souvent que les sets c'estintéressant parce qu'une recherche dans un set ça va être plus efficace que dans une liste. Quand
00:12:09 :on fait dans une liste il faut qu'il parcourt toute la liste alors que quand on est dans un setc'est pas le cas. Les boucles for, alors là c'est l'utilisation de la compréhension de liste,
00:12:18 :les deux en fait sont en complexité 0 n mais c'est un peu moins lourd sur la mémoire descompréhensions de liste, donc là c'est encore un petit peu autre chose que ce qu'on va voir là surpar exemple les parcours. On va voir notamment avec le sort, donc quand on fait des tris,
00:12:34 :à quel point ça peut être assez gourmand. Ouais Simon t'as une question? Ouais je voulais demanderest-ce que tu peux expliquer pourquoi avec les sets et les dictionnaires c'est en complexitéconstante? Alors si je me souviens bien c'est avec ce qu'on appelle les tables de hachage et
00:12:56 :on a d'ailleurs prévu un glossaire là dessus et alors dans le détail il faudrait que je merenseigne précisément là dessus. Alors les dictionnaires en fait c'est parce que déjà dans
00:13:09 :ces deux choses là, je ne suis pas sûr de pouvoir t'expliquer précisément la technique del'implémentation du code derrière mais je ne suis pas sûr que ce soit non plus forcément superimportant. Après ce qui est important de comprendre c'est que les sets et les dictionnaires, la
00:13:26 :différence des listes c'est que tu as une unicité dans le sens où les dictionnaires tu peux pas avoirdeux clés similaires. Donc si tu as une clé, là je sais pas, on n'a pas un dictionnaire ici,
00:13:38 :mais si tu peux pas avoir une clé 1 et une autre clé 1, tu vas avoir une seule clé 1 qui va êtreassociée à une valeur. Si je vais ouvrir un terminal, tu vois là je faisais des petits
00:13:49 :exemples tout à l'heure. Donc tu vois là tu as une clé 1 avec une valeur en chaîne de caractère 1,donc tu peux pas avoir deux clés 1 comme ça. Et donc quand tu accèdes à une valeur dans le
00:14:00 :dictionnaire, si tu fais A1 comme ça, ça va être très rapide parce qu'il y en a, si elle existe,il n'y en a qu'une dans tout ton dictionnaire, donc il n'a pas besoin de parcourir tout tondictionnaire pour vérifier les clés qui correspondent à ce que tu recherches. Et le
00:14:14 :set c'est pareil, un des intérêts du set c'est que tu peux pas avoir de doublons, donc même choseen fait, c'est qu'il va pas avoir besoin de parcourir tout l'élément pour trouver ce quetu veux. Alors qu'avec la liste, si tu lui dis trouve-moi l'index par exemple si t'as une liste
00:14:31 :1, 2, 3, 4, 5, et puis justement on peut recommencer comme ça, et que tu fais avec un index comme ça,bon là il va te dire 0, et tu vois bon là il est en premier donc justement ça s'arrête assezrapidement, mais si on met le 5 par exemple, il va falloir qu'il parcourt chaque élément pour
00:14:48 :trouver où est-ce qu'il se trouve. Et comme tu peux en avoir plusieurs encore, justement enfonction de ce que tu utilises, ça peut être de plus en plus long. Et le tri c'est, on va voir,
00:14:58 :je vais vous le montrer d'ailleurs, je vais vous la préparer pour tout à l'heure, je voulais vousmontrer une petite vidéo du tri et vous allez voir que c'est très très visible à quel point,voilà c'est celle-là, je vous la montrerai, je vous montrerai ça quand on parlera du tri. Et alors
00:15:27 :entre les 7 et les dictionnaires, c'est quoi le plus rapide ? Alors bonne question, en fait j'auraistendance à te dire que je ne mettrais pas les deux en duel, dans le sens où tu ne vas pas lesutiliser pour la même chose, donc généralement en fait si tu as besoin, tu vois je réfléchis là,
00:15:49 :est-ce qu'il y a des cas de figure dans lequel, vu que le dictionnaire c'est vraiment basé surclés-valeurs et que le 7 c'est vraiment juste des valeurs uniques, et que tu n'as pas ce doublon declés-valeurs et d'associations et justement le dictionnaire qui peut être beaucoup plus complexejustement qu'un 7, j'aurais tendance à dire que tu vois c'est même pas une question que tu vas
00:16:08 :te poser dans le sens où si tu as besoin d'un dictionnaire, tu en as besoin pour une raison,tu vois, parce que c'est cette structure de données dont tu as besoin. Par contre souvent
00:16:18 :là où il y a la différence c'est entre les 7, les tuples et les listes, et donc là effectivementtu vas avoir une différence, la liste c'est le plus long parce que tu peux la modifier et tu peuxavoir plusieurs éléments similaires, le tuple ça va être un peu mieux parce qu'il n'est pas
00:16:36 :modifiable, donc il va avoir une taille fixe dans la mémoire, mais tu peux avoir plusieurs élémentssimilaires et le 7 c'est l'ultime un peu, quoi que le 7 faudrait voir justement parce que tu asseulement un élément, après tu peux le modifier le 7. Donc là après faudrait voir précisément entre
00:16:54 :les trois en fonction des cas de figure, comme je te dis ça dépend, souvent tu vas être limitépar ce que tu as envie de faire, donc si tu as besoin de modifier ton élément tu vas partir surune liste, si tu as besoin de modifier ton élément mais tu n'as pas besoin d'avoir des doublons tu
00:17:06 :vas partir sur un 7, si tu as besoin à l'inverse de potentiellement avoir plusieurs éléments quisont similaires, le 7 tu l'élimines, tu vois c'est souvent ça qui va définir déjà en premier lieu cedont tu as besoin, et souvent tu n'as pas trop le choix après, comme je te dis souvent le truc
00:17:19 :qu'on dit c'est ok, le cas de figure c'est si tu as une liste comme ici 1 2 3 4 5 et que tu saisque tu vas y accéder des milliers, des milliards de fois par seconde et que cette liste ne va pasbouger, bah là effectivement ça sert à rien d'utiliser une liste, tu vas utiliser plutôt un 7 ou
00:17:34 :un tuple et là faudrait voir entre les deux lequel est le plus efficace, j'aurais tendanceà dire du coup que le tuple va être plus efficace, là encore ça dépend des opérations que tu veuxfaire, mais si c'est pour vérifier, il faudrait vérifier entre le 7, je vais me le noter là,
00:17:50 :il faudrait vérifier spécifiquement entre les deux, et après il faut faire des tests,parce que souvent quand tu arrives là, quand tu arrives à devoir faire des vérifications entreles deux, parce que ça peut dépendre aussi si tu es sur la machine, sur la qualité,donc souvent tu vas faire des tests, et d'ailleurs j'en profite pour dire que je vous ai pas mis les
00:18:23 :sources sur les autres sessions, on a pas mis les sous-titres et tout aussi, on a un petit peu deretard là dessus, on est pas mal occupé avec le cpf, mais j'ai pas oublié, je vais prévoir ça,ah oui et puis il faut que je vous mette la feuille de présence aussi, pendant que j'y pense,
00:18:37 :quelqu'un va me le rappeler à la fin, donc pour ceux qui sont dans le Toza seulement,comptez, enfin pas besoin de la remplir, pour ceux qui sont juste sur le programme premium,hop et je me note, donc c'est si on en aura, rapidité entre liste et 7, ok, non 7 et tuple,
00:19:00 :entre 7 et tuple, ok, effectivement c'est un bon truc, on pourra le rajouter ici,ça peut être intéressant, alors une autre question, entre une fonction,entre une boucle for et une fonction, là aussi j'aurais du mal à comparer les deux,parce que ça dépend vraiment, là c'est pas très comparable justement,
00:19:26 :là ouais, il faudrait voir, et après pour ton autre question, il faudrait voir deux exemplestrès précis, et ce serait des objets assez différents, donc je sais pas si t'avais unexemple en tête, ouais, après avoir vu ta vidéo de scraping, j'ai fait du coup un petit algo pour
00:19:51 :faire du scrapping, dans le cadre professionnel, et en fait, c'est à dire, un coup je l'ai faitavec des fonctions en fait, et après un coup avec des boucles for, je me demandais lequel étaitmieux, c'est à dire c'est plus modulaire avec les fonctions, et force c'est plus linéaire,
00:20:14 :mais je vois pas très bien en fait en termes de performance, je vois que force c'est peut-êtreun peu mieux, alors là c'est pas une question de performance, c'est vraiment une questiond'organisation de code, parce que si t'as une opération que tu dois répéter dix fois,que t'es une boucle for dans une fonction, ou une boucle for qui fait juste les éléments à la
00:20:33 :suite sans fonction et tout, ça va pas changer grand chose, bon tu vas stocker en mémoire tafonction, ça va être le seul truc en plus, mais c'est pas ça qui va surcharger ton programme,là stocker une fonction dans la mémoire c'est vraiment rien du tout, donc là on pourrait
00:20:49 :penser peut-être si t'avais vraiment une boucle qui s'exécutait des centaines de millions defois à la seconde, que effectivement si tu passes par une fonction, peut-être que dans la mémoirece serait un petit peu plus compliqué d'appeler la fonction dans ta boucle si tu l'exécute énormémentde fois, et là peut-être que ce serait intéressant de ramener ce que t'as dans ta fonction directement
00:21:10 :dans la boucle, mais là encore je suis même pas sûr que ça fasse vraiment une différence. Et doncsi c'est après dans des choses de scrapping, faudrait voir ton code précisément, mais jepense que là c'est vraiment autre chose, c'est vraiment plus organisation du code, et c'est pasça qui va changer les performances. Ok ça marche. Mais n'hésite pas à nous montrer un bout de code,
00:21:30 :là si c'est un truc pro aussi tu peux essayer d'anonymiser un peu et juste extraire l'idée,puis après poste le dans le discord, on pourra on pourra checker ça en plus en détail. Ok,
00:21:43 :alors du coup les compréhensions de liste aussi, donc ça la seule différence si je ne me trompepas, c'est que les compréhensions de liste en arrière-plan c'est vraiment optimisé en C,après ici dans les deux cas c'est vraiment vous faites la même chose, et à chaque fois il va
00:21:59 :falloir boucler, ça va dépendre de la taille de votre liste, puisqu'on fait une boucle 4,et c'est juste qu'en termes de concision sur le code et de la façon dont est fait Pythonen arrière-plan, ça va être ça va être plus optimal. Et oui après de toute façon tout ça
00:22:18 :c'est des trucs, bon c'est ce que je dis effectivement je l'ai pas dit au début,je le dis souvent dans les vidéos quand j'en parle en général, c'est plus des choses théoriques àavoir dans la tête qui sont intéressantes dans la réalité, ça dépend aussi de ce que vous faites,
00:22:36 :c'est sûr que si vous êtes dans la data ou des choses comme ça, forcément ça va probablementêtre un peu plus des choses importantes pour vous, et là encore dans tous les tests que jefais, là j'ai fait pas mal de tests cette semaine quand on parlait sur le discord etc là dessus,
00:22:50 :faut vraiment vraiment pousser le truc loin pour voir des différences de quelques millisecondes.J'avais fait le test sur le justement, alors c'était quoi, je pense que je l'ai encore dansPyCharm quelque part ici, ouais je crois que je dois l'avoir ici, j'avais fait un test dans,non je peux pas l'exécuter, scratch, ok c'est ça, alors attendez je le retrouve, scratch,
00:23:21 :ah oui c'est ça, ouais c'était lui, hop, donc vous voyez c'était ce petit truc là, donc j'ai,voilà c'est le fameux in effectivement, est-ce que c'est plus, ça répond un petit peu auxquestions qu'on faisait au dessus là, donc en fait c'est un exercice que j'ai rajouté d'ailleurs,bon du coup je vous montre un petit peu la solution mais c'est un exercice très simple,
00:23:48 :donc voilà on vérifie avec la fonction si on a un élément qui est dans une liste et on retourne ça,et là on le vérifie avec un élément dans un set, et donc c'est plus, comme on disait,rapide de vérifier si l'élément est dans le set, parce que du coup on a cette unicité des
00:24:04 :éléments dans le set qui n'est pas dans la liste, et là vous voyez j'ai fait une liste donc de 10éléments, 9 éléments x 1000, donc ça fait quand même déjà une bonne grosse liste, ça fait 9000éléments si je ne me trompe pas, 9 x 1000 ça doit être ça, et là je teste ça 1000 fois, et là
00:24:24 :vous voyez on a une différence de 0.005 millisecondes, donc vous voyez il faut quand même déjà rentrerdans des gros trucs, et là c'est vraiment un truc très évident, là il n'y a pas, si vous faites cegenre d'opération que vous savez qu'effectivement vous allez faire très souvent, c'est le genre
00:24:44 :d'opération qu'effectivement c'est intéressant de savoir. Après ne commencez pas à vous embêter àdire, à essayer de tout tout tout optimiser si vous faites du Django et que vous avez besoin devérifier dans une liste de cinq éléments s'il y a un élément qui est présent, c'est mieux si vous
00:24:59 :savez que les éléments sont uniques d'utiliser un set, c'est toujours mieux d'essayer d'optimiser,mais commencez pas vraiment à reprendre toutes vos lignes de code pour trouver où est-ce quevous allez pouvoir optimiser des trucs comme ça, vous allez gagner des microsecondes ici et là,et comme je dis souvent par exemple sur le web il vaut mieux essayer de réduire le poids de vos
00:25:17 :images ou des trucs comme ça, ça fera beaucoup plus de différences que ce genre de choses. Doncfaut pas devenir fou avec tout ça, c'est intéressant de savoir ces éléments là,mais voilà. Donc après effectivement les opérations sur les listes, ça c'est un truc qu'on a vu la
00:25:31 :semaine dernière, le collection, ça faisait un petit peu écho à ça, et c'est des questions quireviennent aussi pas mal dans le Toza, c'est pour ça qu'on les voit principalement pour ceux quifont le Toza, parce que voilà c'est des questions théoriques que vous pouvez aussi souvent retrouverdans les entretiens d'embauche, les gens qui font les entretiens d'embauche avec des questions de
00:25:48 :code aiment bien ce genre de trucs d'optimisation, même si finalement comme je vous dis c'est pasforcément utile après dans la job, c'est quand même des trucs qui peuvent faire la différence,si vous savez ça, ça veut dire que voilà vous êtes arrivé à un niveau où vous avez eu le
00:26:04 :temps d'explorer tous ces trucs là. Ok merci pour le lien, je vais le copier, je vais regarder ça,je regarde ça après la session du coup, et je te referai un retour sur le discord du coupdirectement. Oui merci. Pas d'autres questions jusqu'à présent ? C'est bon ? Donc vous voyez
00:26:33 :par exemple, ça c'est classique, question de question, voilà, qui montre que vous êtes aucourant du truc, quand on fait un pop, quand on le fait à la fin, c'est pas un problème, parcequ'il va juste virer le dernier élément et c'est tout, par contre quand vous le faites au début,
00:26:48 :ce qui se passe c'est qu'il va décaler tous les éléments dans la mémoire, donc en fait ça vaavoir une complexité justement de 0 n, parce que si vous avez cinq éléments, c'est juste cinqéléments à décaler, si vous en avez cinq millions, ça fait beaucoup de choses à décaler. Du coup
00:27:01 :il y a cet objet deck dans le module collection qui est presque exclusivement utilisé pour ça,donc ça c'est vraiment, là encore c'est des cas comme je vous dis très spécifiques, si vous savezque vous avez besoin très régulièrement de faire des opérations comme ça pour enlever des éléments
00:27:19 :au début et à la fin d'une liste, et surtout au début, vous avez le pop left qui va vous permettred'enlever des éléments au début tout comme le pop 0, c'est la même chose, pop 0, pop left,c'est la même chose, sauf que là vous passez par un deck et du coup vous n'avez pas ce décalage
00:27:32 :qui se fait, et du coup c'est beaucoup plus efficace. Et là par contre j'avais commencé etj'avais fait des tests aussi, là je l'ai peut-être encore dans mon pie charm d'ailleurs, si je faisquelques ctrl z, bon c'est pas très grave, mais là j'avais fait des tests et ça commençait quand
00:27:47 :même à avoir des petites différences assez importantes sur des listes là encore de quelquesmillions d'éléments, on passait quand même là, on gagnait quelques 500 millisecondes voire uneseconde sur des gros volumes de données, donc là ça peut quand même faire des différences. Et
00:28:02 :encore comme je vous dis, ça c'est pareil avec les bases de données, on a toujours l'impressionque quand on a une base de données qui commence à avoir 100 000 éléments c'est beaucoup, alorsqu'en fait c'est rien du tout. Donc je vois aussi très souvent, que ce soit en data ou en web,
00:28:15 :des gens qui commencent à sur-optimiser quand ils ont une base de données qui fait 100 000éléments, ils commencent à créer trois modèles Django pour pouvoir avoir des bases de donnéesplus petites etc et complexifient énormément leur code pour avoir des bases de données detrois fois 50 000 éléments plutôt qu'une de 150 000, et en fait une grosse base de données ça
00:28:33 :commence à 100 millions d'éléments et puis vous avez des bases de données qui ont des milliards,bon après c'est optimisé, quand vous commencez à avoir des milliards d'entrées souvent c'est unpetit peu distribué etc, mais voilà il faut quand même se dire qu'une grosse liste, une grosse basede data c'est quand on a 100 millions, 500 millions, 1 milliard etc, là effectivement vous allez avoir
00:28:52 :à partir de quelques millions, quelques dizaines de millions, vous pouvez avoir des petitesdifférences sur certaines opérations de quelques centaines de millisecondes voire secondes, etaprès forcément ça devient exponentiel aussi. Le plus important donc le tri de la liste, d'ailleurs
00:29:08 :bah ouais ok, je vais pas aller trop loin, on va revenir sur le tri d'une liste parce que c'estune des questions donc je vais vous la faire avant de vous donner la solution, et voilà et là vousavez donc cette fameuse chose là sur l'accès rapide entre les sets et les dictionnaires, donc
00:29:26 :comme je vous dis là encore je le répète, mais c'est souvent votre usage qui va déterminer letype de données que vous allez utiliser et après dans des cas précis c'est mieux de quand voussavez que vous pouvez échanger un élément par un autre parce que vous avez un cas précis, vous
00:29:44 :pouvez le faire et ça va améliorer la performance, faites-le, mais sinon voilà c'est souvent quandmême l'usage qui va déterminer ça. Ça va pour ça ? Ok alors on revient sur du coup mes petites
00:29:58 :questions, justement voilà c'est cette question précisément que j'avais en tête. Donc A est unechaîne aléatoire très longue composée de plus de 10 millions de caractères, donc là ça aussipareil, est-ce que 10 millions de caractères c'est beaucoup ou pas ? Là voilà ça commence à être
00:30:12 :quand même beaucoup, c'est pas les trucs les plus... bon 10 millions de caractères çacommence à être pas mal pour une chaîne de caractères, ça serait 10 millions d'élémentsdans une liste je dirais bon ok 10 millions dans une chaîne de caractères ça commence à faire unbon gros bouquin. Donc selon vous, parmi les opérations suivantes, laquelle est la plus
00:30:31 :lente ? Donc il y a une seule bonne réponse, vous avez les quatre là, dites-moi dans le chat laquellevous pensez qui est la plus longue.
00:30:39 :Alors on a deux sorted, un upper, on a après le... alors le 2.2.-1 c'est l'inversion d'uneliste, c'est ce qui permet d'inverser la liste, et le strip c'est... enfin du coup c'est pas une
00:31:04 :liste c'est une chaîne de caractères mais c'est pareil ça va inverser tous les caractères. Alorsok donc on a un peu tout, on a eu les quatre réponses donc c'est parfait. Alors la bonne
00:31:16 :réponse c'est, j'ai prévu le petit reveal attention, c'est le sorted. Parce que, et vousallez comprendre assez rapidement pourquoi si vous pensez, si vous repensez justement à lanotation bigot, le 0 n 0 1 0 log 2 n etc. Là voilà, il faut y aller un petit peu par
00:31:35 :élimination aussi. Dans le premier cas, à point strip, vous enlevez les espaces, dans ce cas-ci,au début et à la fin de la chaîne. Donc là en fait vous vous dites ok bon si c'est juste enlever
00:31:47 :les espaces au début et à la fin de la chaîne, ça devrait pas être trop long parce que au pireen fait vous allez avoir 10 millions de caractères vides, enfin 10 millions d'espaces, et là il vapotentiellement devoir boucler sur toute la chaîne. Donc au pire des cas ça serait un 0 n parce qu'il
00:32:04 :va faire une passe sur toute la chaîne de caractères, donc les 10 millions de caractères,et vous allez avoir 10 millions de vérifications. Le a 2.2.1, donc l'inversion, en fait pareil,
00:32:19 :qu'est ce qu'on va faire, on va inverser les éléments, donc on va prendre le dernier,on va le mettre au début etc. Donc on va les prendre, et là c'est la même chose en fait,
00:32:26 :vous allez inverser, vous allez faire une fois l'opération parce que vous allez passer une foissur la liste et juste inverser les éléments, donc là encore c'est 0 n parce que c'est 10millions au plus, enfin là dans ce cas-ci c'est 10 millions de sur parce que vous n'avez pas de
00:32:43 :step, si on mettait un step là par exemple, le step c'est le moins un déjà donc on ne pourraitpas en fait, mais bon. Donc là on est avec un 0 n qui va être la taille de la liste, donc 10
00:32:54 :millions d'opérations. Le a.upper c'est la même chose parce qu'en fait vous allez passer là encoreune fois sur tous les éléments, vous allez prendre le premier élément, vous allez le mettre en upperetc donc pareil 0 n parce que vous passez une fois sur la liste, vous n'avez pas de nécessité de
00:33:09 :passer plus qu'une fois sur tous les caractères, une fois que le caractère il est mis en majusculevous y touchez plus. Sorted par contre là c'est différent et c'est pour ça que c'est le plus long,
00:33:19 :c'est que sorted il ne peut pas en une seule fois vérifier, c'est là où je vais vous montrer lapetite vidéo, vous allez comprendre si vous avez déjà essayé de faire les algorithmes de tri,ça c'est l'algorithme un des plus connus, il y en a plein qui existent, il y a le triabule,
00:33:33 :celui de piton c'est le team sort. Là quand vous allez trier les éléments, ça peut pas être vraimentdans le meilleur des cas, vous allez avoir le 0 n mais c'est vraiment le meilleur des cas, c'estvraiment si en fait, si je me trompe pas, si la liste est déjà triée probablement que là vous
00:33:51 :allez avoir le meilleur des cas où ça va être 0 n et encore je pense que c'est probablement 0 nplus 1 ou un truc comme ça parce que probablement qu'il va quand même devoir déjà faire unepremière vérification, première pour vérifier comment est la liste et s'il voit que tout est
00:34:06 :dans l'ordre il ne fait pas de tri. Mais le sort, le truc c'est qu'il faut vraiment intercaler leséléments, souvent c'est comme ça, le triabule justement c'est vous décalez petit à petit etc'est pas le plus efficace parce que ça fait beaucoup d'opérations, le team sort, si je me
00:34:21 :souviens bien, c'est des trucs super compliqués, là ça devient plus compliqué où il prend desparties et il essaie d'optimiser pour faire justement le moins de répétition possible. Mais
00:34:31 :voilà tous les trucs de tri, dites vous de base que c'est quelque chose qui est assez intense etsi je vous remonte du coup la petite vidéo, voilà elle est là, donc là ça vous montre, ça c'estsuper parce que c'est vraiment, ça vous montre de façon très graphique qu'est ce qui se passe,
00:34:46 :vous voyez en fait il passe à chaque fois, il intervertit les éléments, il fait ça, il fait ça,et vous voyez que là on a le nombre d'accès à la liste, et là vous voyez on est déjà à beaucoup,beaucoup, ça augmente beaucoup, donc on a 130 comparaisons, 450 accès à la liste, etc. Et donc
00:35:05 :petit à petit ça tri, mais vous voyez que c'est très très loin d'être fait en une seule fois,là vous voyez il commence à optimiser, il prend une première partie, il tri, donc je pense queça doit être avec des minimums ou des maximums, je me rappelle avoir vu ça il y a peut-être dix ans,
00:35:22 :donc je me souviens vraiment plus exactement comment c'est fait, mais vous voyez que c'estun petit peu comme ça. Et après il refait une dernière fois, donc là vous voyez on a vraiment
00:35:33 :beaucoup de passages, et là c'est bon. Et après on a le bubble sort, comme ça, c'est bien lui çadoit être, je me demande si c'est même pas lui qui a inventé le truc du team sort, parce que lemec s'appelle Tim si je me souviens bien. Donc là vous voyez le tri à bulle, on voit un peu, j'aime
00:35:53 :bien les exemples comme ça, parce que là on voit bien qu'en fait à chaque fois il passe sur toutela liste, donc là vous voyez c'est pour ça que ça fait, quand on regarde le nombre d'accès au array,vous voyez que ça monte beaucoup plus vite, parce qu'à chaque fois en fait il passe sur toute la
00:36:05 :liste, et si je me souviens bien il intervertit juste entre un et l'autre, donc si on a trois etun il va intervertir les deux, donc il va mettre le 1 avant le 3, il va continuer, si on a 7, 5,il va les intervertir etc, et il va faire ça à chaque fois, et petit à petit en fait à force
00:36:21 :de repasser sur la liste, vous voyez que tous les éléments vont se décaler, donc là si on regardepar exemple ici, vous voyez que l'élément ici, il se décale petit à petit, parce qu'à chaque foisil intervertit avec l'élément à côté, et quand on fait ça un certain nombre de fois, ça finit par
00:36:33 :trier la liste, mais vous voyez que c'est vraiment pas efficace. Et là à la fin ça commence às'accélérer un peu, mais à chaque fois en fait on repasse sur toute la partie là. Donc voilà,
00:36:45 :tout ça pour vous dire que les tris c'est vraiment le pire truc par rapport aux autres,finalement les autres c'est relativement rapide. Ouais Gab ? C'est l'heure de trucs qu'on fera
00:36:56 :avant l'entretien du coup, comme question, faites nous un tribune machin. Oui alors après ça c'estle genre de... c'est le fameux débat des questions d'entreprise des fois, où perso j'ai jamais eu
00:37:12 :besoin. Alors si tu vas à Google, si tu postules pour un poste de senior à Google dans l'équipealgorithme et optimisation, oui j'imagine que tu auras des questions bien plus difficiles mêmeque ça. Si tu postules pour un poste Django et qu'on te demande de faire un tri à bulles, ça c'est
00:37:29 :le genre de question que je trouve complètement débile parce que j'ai jamais eu besoin de coderun tri à bulles en disant de code, que ce soit pour de la data, pour du web ou quoi que ce soit.
00:37:38 :Voilà il y a des gens qui sont payés pour justement se casser la tête pour trouver lesfaçons de faire les plus optimales, donc c'est comme si on te disait, c'est comme même si surun poste Django on te disait voilà refais moi un framework Django, à la limite là ça pourrait
00:37:57 :déjà être un peu plus intéressant de se dire ok c'est un peu plus lié à ce que tu fais, maislà encore si j'engage un junior je m'attends pas à ce qu'il soit capable de me refaire unframework style Django, je m'attends à ce qu'il soit capable d'utiliser ce que d'autres gens plus
00:38:09 :seniors ont passé du temps à faire pour que ce soit quand même relativement plus simple pourun junior tu vois de rentrer dans le domaine. Donc voilà c'est pour ça que c'est des questions des
00:38:21 :fois que tu peux avoir un entretien, mais j'ai toujours tendance à dire que si on te pose cettequestion là dans un entretien justement Django et qu'on se base uniquement là dessus pour t'engagerc'est probablement que tu veux pas aller dans cette entreprise, parce que ça veut dire que
00:38:32 :les façons de juger la qualité mais les compétences de leurs employés sont pasforcément super. S'ils jugent de toi, si tu sais faire un tri à bulles ça augure pas forcément
00:38:46 :des bonnes choses pour la suite sur comment ils vont juger tes performances en général dans laboîte tu vois. Mais bon après c'est des trucs génériques, ça veut rien dire. Ok merci pour ta
00:38:57 :réponse, c'est parce que j'ai demandé à GPT une fois de faire des tests techniques de développeurPython et du coup de me faire ça, bon bref après c'est du CPT et j'avais parlé avec une recruteusejustement chez Kraken Django et elle a eu le même discours que toi. Oui mais c'est ça, je sais ce que
00:39:16 :j'entends aussi souvent en fait c'est pour ça comme je te dis la plupart des entreprises quisont lucides voilà ils le savent. Souvent en fait je te dirais, là encore tu vois un peu red flag,
00:39:26 :souvent les entreprises qui font ça, ça va être le senior que ça fait 40 ans qui code et que luijustement ça va être souvent le genre de personnes qui veulent absolument pas utiliserles IA en ce moment parce qu'ils vont dire non non moi je fais tout à la main etc et qui veulent
00:39:41 :encore tout faire en C etc. Non mais après c'est ça, il y a des bonnes choses dedans toujours c'estsûr que faut pas, c'est pour ça je dis ça dépend des cas de figure, il faut pas tout jeter non plusà la trappe, c'est juste qu'il faut pas être comment dire extrême tu vois c'est toujours
00:40:07 :super intéressant, c'est intéressant de voir ces choses là, après tu vois c'est dans quel ordretu le fais, c'est comme je vous disais sur les optimisations, je préfère avoir quelqu'un quifait des tests unitaires, qui fait du code clean etc plutôt que quelqu'un qui commence à remplacer leslistes par des sets dans tous ces trucs où ça va gagner quelques millisecondes. Donc voilà c'est
00:40:26 :toujours ça, c'est là encore quand on apprend à programmer, est-ce que ça vaut le coup de passertrois mois à commencer avec du C, à peut-être se dégoûter du truc parce qu'en fait ça va êtrevraiment très compliqué dès le début, ou est-ce qu'il vaut peut-être mieux commencer par un truc
00:40:41 :plus simple comme Python et une fois qu'on commence à être à l'aise avec le développement se direok bah maintenant j'ai envie d'aller plus loin et de voir comment ça fonctionne dans la mémoirede Python, comment c'est codé derrière, qu'est ce que concrètement ça fait quand on exécute un
00:40:54 :script et qu'on a un pyc etc, ça c'est des trucs voilà sympa mais que voilà je mettrais plus endeuxième, en second quoi. Ok alors on continue, oui finalement le temps passe, on va continuer là
00:41:10 :sur nos petites questions donc voilà donc première question sur l'optimisation. Celui-là donc lefameux all, qu'est ce que vous pensez, est-ce que vous voyez bien là, ouais ça va être bon. Donc
00:41:24 :la fameuse variable all qui est souvent vue dans les fichiers init, laquelle des affirmationssuivantes est vraie, selon vous 1, 2, 3 ou 4. Donc là si vous avez déjà vu ça devrait pas être trop
00:41:35 :compliqué sinon ça va être un peu du pif. Donc ouais, qu'est ce qu'il me dit, une variable detype string représentant un alias pour le nom du paquet, ouais, un booléen qui est vrai lorsquetoutes les variables doivent être importées, alors un booléen qui est vrai lorsque toutes les
00:41:52 :variables doivent être importées, ok, une liste de chaînes de caractère qui contient toutes lesvariables importées, ouais, une méthode pour appeler all à une instance de la classe, ça devrait être,ok. Alors pif. Je l'ai eu, je l'ai eu, j'ai eu bon et là je pourrais même pas te répondre. C'est pour
00:42:13 :ça que c'est bien, c'est pour ça qu'il y a pas mal de réponses que je vous remontre aussi,et en général je vous dirais même ceux qui sont d'ailleurs ceux qui sont bien avancés là dansles tâches, n'hésitez pas à revoir tout ce que je vous ai mis jusqu'à présent, vous avez vu qu'il
00:42:29 :y a beaucoup de choses, des petits trucs comme ça, vous les revoyez juste une fois toutes lessemaines et puis au bout d'un moment ça va être automatique. Alors, ouais, effectivement,
00:42:41 :effectivement, bonne réponse de Gab et de Simon, une liste de chaînes, ouais c'est ça, une listede chaînes de caractère, ouais, et donc de Gab, Salvatore et Simon, bonne réponse, effectivement,c'est hop, reveal, tac, c'est celle-ci. Donc, variable de type string représentant un alias
00:42:59 :pour le nom du paquet, j'ai essayé de réfléchir en même temps, est-ce que c'est des choses quiexistent ou pas ? Non, alors le alias pour le nom du paquet c'est quand on fait from random,
00:43:08 :enfin import random as, le as, et qu'on peut l'importer avec un alias pour avoir quelquechose de plus raccourci ou des choses du genre ou un autre nom. Le booléen qui est vrai, ça aussi,
00:43:20 :ça je pense pas que ça existe, ça me dit rien. Alors la liste de chaînes de caractère,effectivement, et donc là justement je vous redirige vers le glossaire que Kevin a fait,tac, on l'a rajouté ici. Donc voilà, en fait c'est pratique, moi je l'ai vu utilisé très souvent,
00:43:38 :en fait, alors là voilà, il vous montre un bon exemple ici, vous avez différentes fonctions etclasses à l'intérieur d'un fichier, et en fait si vous n'avez pas ce all, par défaut il va toutimporter, et si vous avez par contre un all, il va importer que ce qui est défini en tant que
00:43:57 :chaîne de caractère, donc là c'est la chaîne de caractère qui représente les différents objets,et ça c'est, moi je l'ai vu le plus souvent utilisé en entreprise en fait quand on faisaitdes modules qui n'étaient pas finis, en fait, on était, parce qu'on était, je sais pas,on était peut-être une trentaine à travailler sur des modules, et du coup des fois on travaillait
00:44:20 :sur une partie d'un fichier, et il y avait plein d'autres personnes dans l'entreprise qui importaientces modules, et du coup pour pas avoir des fois de clash aussi, des fois ça peut être des trucs,par exemple vous avez une fonction publique ici qui est utilisée, et là on est en train de coder
00:44:40 :une autre, mais qui n'est pas encore la finale si vous voulez, alors ça ça peut être résolu deplein de façons différentes, ça peut être avec git, ça peut être avec différents workflows,vous allez avoir différentes parties de l'entreprise qui vont utiliser différentesversions du code etc, mais je sais que moi j'avais déjà vu ça, voilà donc une fonction publique
00:44:56 :actuelle qui est utilisée, et après des développeurs qui travaillent et qui font desmerges régulièrement pour quand même tester de leur côté, et qui justement avaient donc des chosesqui n'étaient pas censées être utilisées, qui étaient en work in progress, en train d'êtreterminées, et une fois que c'était bon, bah du coup on pouvait juste changer les noms, et ça
00:45:17 :permettait de cibler qu'est-ce qui allait être importé. Ouais, question de Simon. Oui en fait ceall, il est utile seulement et seulement si on utilise from mon module import étoile, c'est ça ?
00:45:34 :Alors là tu me fais douter j'allais dire, parce que c'est ce qui est dans la réponse,mais il me, attend je réfléchis, oui oui oui oui, parce que, attends. J'ai fait des petits tests cet
00:45:49 :après-midi, et j'ai eu l'impression que c'était bien ça, c'est à dire que c'est pris en compteque si on fait from module import le splat, mais sauf que cette façon de faire, si j'ai bien compris,elle est quand même super déconseillée. On nous dit partout de ne pas faire ça. Est-ce que le all
00:46:08 :sert vraiment à quelque chose ? Oui bah après comme je te dis en fait ça dépend, c'est pourça que je vous parlais de moi la façon dont je l'ai vu utilisé. Après en fait si tu regardes
00:46:19 :dans les fichiers de Python je sais que je le vois très régulièrement, mais souvent parce quejustement, parce que comme c'est quand même une possibilité, même si on ne te recommande pas dele faire, par exemple si l'exemple que j'ai en tête c'est le module, on va aller voir dans notre
00:46:32 :PyCharm, si je fais un petit tuc, donc si on fait import random justement, effectivement ouitu as raison de le dire, effectivement c'est que quand tu fais le from, parce que quand tu fais unimport de random, tu as accès à tout si je ne me trompe pas, tu as accès vraiment à tout ce que
00:46:57 :tu veux dedans, c'est juste que quand tu importes tout effectivement, et c'est là qu'on va allervoir si on va voir le module random, tu vas voir qu'il y a plein de choses qui sont, voilà tu voislà tu as le all ici, et c'est qu'en fait tu vois par exemple là ils utilisent plein de constantes
00:47:10 :qui vont être utilisées à l'intérieur des classes, des fonctions etc, pour tu vois ça va êtreje sais pas des magic constants, donc ça j'imagine c'est des trucs qui sont utilisés pour faire lesopérations random etc, et du coup ils ne veulent pas quand tu fais un from, parce que comme je
00:47:28 :disais on peut le faire, donc je pense qu'à un moment il faudrait qu'ils se disent soit on interditon enlève ça de Python et on se dit ok c'est vraiment pas une bonne idée, et on l'enlève, jepense pas que ça arrivera, parce qu'il y a quand même des cas de figure, et Python est connu pour
00:47:40 :être permissif quand même, c'est plutôt voilà je vous permet de faire les deux façons de faire,après c'est à vous de voir dans quel cas vous préférez l'un ou l'autre, parce que voilà sic'est bien maîtrisé, on conseille de ne pas le faire, parce que souvent c'est voilà si tu le fais
00:47:51 :en tant que débutant, que tu sais pas ce que ça implique, que tu le fais justement sur des modulescomme ça, que c'est pas toi qui a créé, et que là finalement ça va importer tous ces trucs là,et que toi tu veux juste le sample, bah c'est pas très très intéressant, et souvent en fait les,
00:48:05 :moi j'ai toujours vu des débutants l'utiliser comme ça, en se disant ah en fait j'ai pas envie,c'est toujours, c'est comme les gens qui plutôt que de dire get number, ils vont faire justementnumber, ils vont faire get nbr comme ça, parce qu'ils vont se dire voilà il faut que tout soit
00:48:21 :petit, tout soit optimisé, et là encore non, vaut mieux que ce soit explicite, et là c'est pareilen fait, si tu veux faire un random pour un sample, je préfère largement un code comme ça,où c'est très explicite, que là ça c'est la fonction sample du module random, parce que tu
00:48:33 :pourrais avoir ta propre, tu pourrais avoir tes fangtools, je sais pas, enfin ça c'est un trucpiton, tes je sais pas, fang, et tu pourrais avoir ton propre fang.sample, donc c'est beaucoup plus
00:48:43 :clair comme ça, quand on a le nom qui est explicite, et voilà, et moi souvent je vois ça,de cette façon, je vois des étudiants qui disent ok bah en fait j'ai pas envie de taper à chaquefois random.sample, donc je vais juste faire ça, comme ça je vais pouvoir utiliser mon sample à
00:48:57 :chaque fois, et ça va me faire moins de choses à écrire, pareil aussi je vois très souvent leasrd, ça aussi on le voit des fois je pense dans la doc piton, ou des scripts en général, voilà,si vous faites ça, faites pas ça en fait, parce que bon ça fait juste obfusquer les choses, pas
00:49:14 :obfusquer mais obfusquer, je sais pas si c'est, je crois que c'est un mot anglais, je crois quec'est une traduction française, je sais plus, ou c'est peut-être obfusquer aussi en français,mais voilà, si vous faites ça pour ça, pour juste avoir deux trois trucs en moins à taper,ça sert à rien. Donc voilà, tu vois, le truc est permis, on dit que c'est une mauvaise pratique
00:49:34 :parce que souvent c'est utilisé d'une mauvaise façon, mais si tu sais ce que tu fais, que tul'utilises d'une bonne façon, bah pourquoi pas, et dans le cas de, c'est pour ça je vous dis,je le vois très souvent ici dans les modules piton, parce que voilà, t'as pas envie quand
00:49:47 :t'importes le truc, d'avoir nv, magic, constant et log4 ici, qui soit dans ton espace global ici,vu que c'est des trucs qui sont juste destinés à être utilisés dans ton, dans ta logique interne,si tu veux. Ok ? Ouais Gab ? Très rapidement, ouais, je ne fais jamais sur les modules par
00:50:12 :exemple, il m'arrive souvent, même sur 100% des projets, avec Django par exemple, où je me créemes packages, et dans mes packages, en fait dans mon init par contre, je vais toujours faire unfrom, le nom du module, import, étoile. Ouais, bien ou pas bien ? Alors ça, oui, alors, je mets
00:50:34 :décorateur par exemple, mes décorateurs, mes fonctions, voilà, quand je crée mes modules.Alors, la dernière fois que j'ai fait ça, c'était il y a longtemps, je sais, parce que je sais queen fait ça permet, il faut vraiment voir les cas de figure, il y a des cas de figure en fait où ça
00:50:50 :te permet notamment d'éviter, quand tu as beaucoup de modules, de sous-modules, etc., ça t'évited'avoir justement, là pour le coup, des trucs à rallonge, parce que tu vas avoir des modules unpeu planqués, du coup tu peux importer directement dans ton init les modules, et comme ça tu peux
00:51:05 :les appeler directement, sans avoir besoin de préfixer tous les dossiers et sous-dossiers quandtu as des gros packages. Après, il faut faire attention, je sais que, je sais que, comme je dis,
00:51:16 :ça fait longtemps que j'ai pas fait des trucs complexes comme ça, après je revois, après souventça c'est, ça et le whole, j'aurais tendance à vous dire que ça va de toute façon beaucoup dépendredes entreprises dans lesquelles vous êtes, et que en fonction, parce que ça peut, il faut bien les
00:51:33 :maîtriser, ça peut être un peu casse-gueule, le whole pas tant que ça, parce que bon voilà, c'estassez simple, mais quand tu commences à effectivement dans ton init importer des éléments, là il fautfaire attention aussi pour les imports circulaires etc, donc ça je te dirais que souvent en fait si
00:51:47 :tu arrives dans une entreprise, ça va être assez clair, tu vas voir effectivement dans les moduleset tu vas rajouter une fonction, et là du coup t'auras déjà effectivement dans ton init pleind'imports, et du coup tu vas rajouter, une fois que tu as fini de coder ton utilitaire, tu vas le
00:52:00 :rajouter aussi dans l'import comme ça, ça va suivre les conventions, donc il faudrait voir un peuplus au cas par cas. C'est pas une bonne, c'est un peu comme le from import étoile, c'est pas
00:52:12 :une bonne ou une mauvaise façon, ça dépend comment c'est utilisé, ça dépend pour quelleraison c'est utilisé, et c'est juste que ouais ça peut être, j'ai des souvenirs aussi de petitsproblèmes avec ces trucs là. Ok merci. Et salvatore et from, c'est là encore, j'aurais tendance à dire
00:52:32 :c'est pas mieux ou moins bien, il faut savoir ce que tu fais, si tu fais ça, il faut savoir que sijamais après tu fais un truc comme ça, bah tu risques, parce que voilà sample, surtout samplec'est un nom assez commun, donc voilà c'est le risque, c'est que tu écrases le truc, moi j'ai
00:52:49 :tendance à bien aimer les trucs explicites, encore plus maintenant effectivement avec copilot, parceque c'est vrai que souvent maintenant, ça m'arrive de plus en plus de dire ce que je veux, et puisd'avoir copilot qui complète, on a eu un petit débat là dessus, sur le discord, donc il faut l'utiliser
00:53:10 :dans les bonnes conditions etc, mais c'est vrai que je prenais l'exemple de Django, où souventje vais avoir par exemple import accounts.models, et du coup je vais avoir accounts.models.user
00:53:23 :ou des trucs comme ça, et souvent comme je disais Gab, je crois aussi les requêtes, c'est vrai quesouvent maintenant je vais dire voilà get all users that joined two days ago, voilà et puis làdu coup ça va me faire exactement ce genre de truc, donc là vous voyez ça va m'écrire
00:53:44 :accounts.models.user, ça va mettre le that joined, ça va tout me faire, ça rend paresseux, c'estpratique, il faut toujours, j'essaye de temps en temps quand même de me forcer à le refaire à lamain pour justement pas trop perdre non plus, et pas être justement en autopilote pour le coup,
00:54:00 :et de rester en copilote, mais c'est vrai que des fois on est tenté, après moi perso je pense queça va devenir de plus en plus ça le code, un peu comme c'est un peu la discussion qu'on avait,pour moi voilà c'est un peu comme le no code, le no code finalement c'est un peu du code fait
00:54:17 :d'une autre façon, ben là je pense que de moins en moins on va écrire explicitement tous lestrucs, et que de plus en plus je sais que je veux tel truc du tel query set, je suis capable devérifier que ça va être bien fait, je vais relire les choses derrière quand même, il faut
00:54:31 :toujours continuer justement à relire son code et à se souvenir des choses etc, à des fois écrirequand même un petit peu, voilà c'est des trucs qu'il faut retenir, mais après c'est vrai quedans le, par contre dans le day to day on va 20, 25, des fois à 50 fois plus vite, enfin 50% plus
00:54:48 :vite, peut-être pas 50 fois mais deux fois plus vite on va dire, donc ce qui fait 100% plus vite,si mes souvenirs sont bons de match, le pourcentage est toujours pas bon là-dedans,deux fois plus vite ça doit être 100% plus vite si je me trompe pas, donc oui pour moi voilà si
00:55:06 :on peut garder, si on peut trouver le bon équilibre là-dedans sans devenir 100% en autopilote maisquand même aller plus vite, ben c'est tout bénéfique. Ok donc je reviens sur mes petites
00:55:18 :questions, ça va pour tout ça ? Ok alors autre question, on continue, bon celle-là assez facile,qu'elle définisse un set ? Alors c'est un peu compressé, là je sais pas si on voit très bien,
00:55:39 :là le dernier c'est des parenthèses, les deux premiers c'est des accolades, le troisième aussic'est des accolades, ça c'est les crochets, le 1 2 3 l'avant dernier et le 7 c'est un 7 avec desparenthèses. Et oui Salvatore quand t'es étudiant effectivement il n'y a pas trop d'intérêt, les
00:56:02 :IA genre GPT et tout c'est bien pour apprendre quand même je trouve, parce que justement c'estun peu comme un prof particulier, après faut quand même toujours vérifier et tout, qu'au pilote quandt'es vraiment étudiant non, GAV je lui ai conseillé de commencer parce que justement il y a des trucs
00:56:17 :qu'il commence à faire, à répéter etc, ça peut être intéressant de commencer à utiliser ces outilspour voir comment tu peux les incorporer dans ton workflow sans en être trop dépendant, donc il fautvraiment faire attention, mais ça peut être intéressant au niveau de GAV où tu commencesà travailler justement et tout, d'être au courant que ces outils existent et voir comment tu peux
00:56:34 :les utiliser. Ok alors le 1, le 2, il n'y en a que 2, effectivement là c'est un choix multiple,alors 4 et 6, 1 et 4, 1 et 4, 4 et 6, le premier, je vais regarder les tuples, alors déjà effectivementdans ce genre de trucs vous pouvez y aller par élimination, le dernier c'est clairement un tuple
00:57:04 :avec les parenthèses, bon après faut le savoir bien sûr, mais voilà c'est les types natifs, le tuple,les listes, généralement on les connaît, le dictionnaire aussi, donc ça c'est les accolades,clé-valeurs avec les deux points, donc ça c'est dictionnaire, celui-là on le raye, celui-là aussi,donc il reste le premier, le troisième et le quatrième, donc est-ce qu'il y a quelqu'un qui a
00:57:30 :dit ça, 1 et 4, donc alors je sais plus qui avait eu cette question ici, donc effectivement lesréponses c'est 1 et 4, et ce n'est pas celui-là, parce que celui-là effectivement, si on va dansle prompt, donc ça c'est le dictionnaire, et je vous l'avais dit, je crois, donc voilà si on fait
00:57:53 :un type de ça, parce que si on fait juste ça, ça va retourner, c'est pas très bien, ça c'est undictionnaire, le petit moyen un peu mnémotechnique, je vous avais dit, c'était effectivement que le 7c'est le seul qui, même si je fais un 7 ici, si je fais justement comme ça, et que je fais un type
00:58:10 :de A, il va me, non attendez, oui non là il me met classe 7, c'était quoi l'exemple que j'avais,ah je sais plus, oui non c'est quand on veut en faire un vide, oui c'est ça, quand on veut en faireun vide, alors si j'en fais un vide, oui bah non là il va me mettre, il va mettre classe, non ok
00:58:34 :c'est ça voilà, donc si je fais un 7 vide effectivement, je fais un 7 vide comme ça,donc et là si j'affiche A, il m'affiche vraiment 7 avec les parenthèses, et c'est le seul type,si je me trompe pas, où il n'y a pas une façon justement de le voir avec des symboles, parce que
00:58:51 :la chaîne de caractère ça va être les guillemets, le dictionnaire justement ça va être les accolades,le tuple ça va être les parenthèses, la liste les crochets, etc etc, je crois que ça fait le tourdes principaux, et le 7 quand on fait un 7 vide, et bien ça nous retourne le 7, et effectivement
00:59:08 :pour faire un 7 vide, on peut pas utiliser des symboles comme ça, il faut utiliser le constructeurcomme ça, à savoir que tous les autres aussi on peut utiliser le constructeur, on peut faire undict comme ça, on peut faire une chaîne de caractère comme ça, on peut faire un int comme
00:59:22 :ça, etc, le 7 c'est le seul que comme en fait il y a déjà les accolades pour le dictionnaire,bah du coup on peut pas. Donc une façon de s'en souvenir aussi c'est de le faire là encore par
00:59:33 :élimination, de vous dire, est-ce que c'est de vous rappeler que c'est possible de créer undictionnaire vide, et qu'on le fait très souvent, ça arrive souvent de créer un dictionnaire vide etde le peupler après, et donc voilà vous pouvez aller par élimination vous dire ok non je sais
00:59:46 :qu'on peut créer un dictionnaire vide, y aller aussi en vous disant que le 7 c'est le seul quijustement quand on veut faire un 7 vide on doit passer par le constructeur ici, et après lepremier c'est plus logique parce que voilà c'est vraiment la forme habituelle qu'on a de voir un 7.
01:00:03 :Le type de A, ouais du coup c'est ça, le type de A c'est quand tu fais type,ça te montre à chaque fois la classe avec le constructeur. Ok, ensuite, on va déborder
01:00:24 :un tout petit peu, on va essayer d'accélérer un petit peu, alors celui-là,celui-là donc je vous laisse regarder normalement, ça fait, ouais c'est optimisation aussi ça. Donc
01:00:42 :prenez le code ci-dessus, après exécution de ce programme, result c'est une liste de tous leséléments de liste 1 qui sont aussi présents dans liste 2 triés par ordre croissant. Si liste 1 et
01:00:52 :liste 2 étaient des listes beaucoup plus grandes, quelles lignes de ce programme devraient êtremodifiées afin de réduire considérablement le temps d'exécution ? Donc la 5 c'est le convertissage
01:01:02 :en 7 de la liste 2, le 7 c'est la vérification donc avec le in, donc on vérifie si un élément estprésent dans ce cas dans un 7, la 8 c'est on ajoute une liste à une liste, du coup donc on a une listequi se remplit petit à petit et on réassigne ça dans cette variable ici, et la 9 c'est le tri de
01:01:25 :la liste. Alors selon vous, qu'est ce qui est le plus, qu'est ce qui prend le plus de ressources ?Qu'est ce qu'il faudrait modifier pour que ce soit amélioré ? Et là il n'y a qu'une réponse possible.
01:01:43 :Mais ouais là je pense que voilà vous êtes bien parti, effectivement c'est la 9 parce que dela même façon, la 8 effectivement il y a beaucoup et je crois que la personne qui avait fait, ouais c'est ça,avait coché une seule réponse, c'est ça, avait coché celle là aussi. Alors le truc en fait qu'on peut
01:02:05 :faire c'est que effectivement le sorted, là on le fait à chaque fois, il y a ça aussi, c'est surtout ça,enfin c'est un peu les deux justement. Là on est souvent mis en erreur parce que là on ajoute,
01:02:15 :on fait résultat plus éléments, on recrée du coup une variable, on ajoute des éléments donceffectivement il y a un truc qui nous dit ok on ajoute beaucoup beaucoup d'éléments, on recréeune variable, ça peut être assez intense. Oui c'est intense mais là encore pas autant que le sorted
01:02:30 :parce que le sorted à chaque fois on va devoir du coup tout retrier. Donc à chaque fois il refait,à chaque itération de la boucle en plus, parce que là c'est ça le problème, c'est que le result iciil est indenté à l'intérieur de la boucle. Ça veut dire qu'à chaque fois qu'on va boucler sur un
01:02:44 :élément de la liste 1, on va la remettre en ordre. Donc on va faire une opération qui déjà est laplus longue de tout ce qui se passe ici et en plus on l'a fait à chaque fois. Donc là clairement
01:02:53 :c'est la 9 qui est en faute sur toute la ligne. Après effectivement là dans ce cas-ci c'est plusqu'il faut la sortir, vous n'avez pas trop de façon, à un moment il faut bien faire le tri doncvoilà vous êtes obligés de la faire, il n'y a pas une autre façon de faire un tri que de passer
01:03:11 :par ces fonctions de sort, à moins de coter la vôtre qui soit plus efficace et de révolutionnerle monde de la programmation. Mais c'est ça, là c'est surtout qu'il faut changer l'inventation.
01:03:22 :Ça va pour ça ? Ok next. Alors celui-là, bon j'avais prévu de vous faire des petitsexemples mais je vais vous rediriger vers le glossaire vu qu'on a déjà dépassé une heure.
01:03:42 :Je vais vous rediriger vers le glossaire parce qu'il explique tout bien, je voulais faire despetits exemples pour ça mais je dois l'avoir ici, voilà d'ailleurs il est là. Donc voilà,
01:03:52 :je vous le mets dans le chat si vous voulez. C'est aussi pas très compliqué, je voulais vous montrerconcrètement avec un script mais finalement c'est ce que je montre ici et que j'expliqueà quoi c'est égal, quand on l'importe etc. Donc voilà je le montre ici, quand on l'importe c'est
01:04:11 :égal au nom etc. Donc je vous laisse aller voir ça, on va passer sur celle-ci. Et donc la bonneréponse c'est il sert à vérifier si le fichier est exécuté plutôt qu'importé. Alors celle-là
01:04:24 :ça fait écho à ce qu'on avait vu dans les premières sessions. Donc est-ce que ça vous dit quelque chose ?C'est cool, je viens de voir que j'ai des outils, je sais pas si c'est nouveau, je peux écrire jepense sur la présentation. Donc selon vous, dans ce cas-ci,
01:04:57 :donc là c'est séparé, je vais en profiter, c'est séparé comme ça. 1, 2, 3 et 4.Ouais bon ça va, vous avez bien retenu la leçon. Effectivement, si je reviens ici, c'est la quatrième
01:05:27 :parce qu'on l'avait vu, vous faites pointer les deux objets vers le même objet en mémoire,vous ajoutez dans la liste 1 et finalement la liste 2 se retrouve modifiée aussi. Donc là aussi voilà,
01:05:37 :petite révision simple là-dessus. Ensuite, ok alors celle-là elle est un petit peu plus tricky,on l'avait déjà vu aussi, mais je vous la remets parce que c'est important de bien comprendrecelle-là. Donc combien de chaînes de caractères et usernames différentes sont simultanément
01:06:00 :présentes dans la mémoire active de l'interpréteur quand on arrive au time.sleep ? Donc quand onarrive ici, hop, ils sont fous de m'avoir mis ces outils là, je vais m'amuser avec ça. Donc voilà,
01:06:14 :quand on arrive ici, combien de usernames on a dans la mémoire de l'interpréteur ? Donc 3pour Gabriel. Et ouais, là aussi c'est bon, 3 chaînes de caractères. Et dans ce cas-ci c'est
01:06:41 :vrai que c'est assez, je revérifie là, mais qu'est-ce qui peut induire en erreur dans celle-ci ?Ouais, moi c'est celle-là, il me semblait que la première fois que je l'avais vue, je m'étaisdit ah oui, il y a peut-être un truc qui peut mélanger les gens. Ouais, non en fait, c'est
01:07:01 :assez clair en fait, on a effectivement celle dans l'espace global, on a celle qui, je pensequ'en fait où il y a celle qui peut mélanger, c'est celle-ci là. De la méthode ? Ouais,
01:07:11 :bah yes. Bah celle-là tu comprends que c'est une de classe, mais l'autre honnêtement tu te dis que,tu vois, si ça se trouve, moi j'aurais pu me planter là, maintenant non, mais si c'est moiqui l'ai eu en test, j'ai pu répondre 2. Puisque tu hésites sur le fait que, est-ce que, parce que
01:07:31 :comme tu as le mot global, tu hésites, tu as le mot-clé global qui existe, pour dire que tuvas utiliser celle qui est au-dessus. Ouais, ouais, ouais. Tu vois, donc en fait, tu vois, après tu sais
01:07:43 :plus trop si c'est juste une réflectation ou... Ouais, ouais, je vois, je vois, effectivement. Moij'aurais eu tendance à dire celle-ci, parce que je me dis que des fois les gens se disent ok,donc c'est une, c'est pas, tu vois, comme c'est un attribut de la classe, c'est pas vraiment,
01:08:01 :c'est pas vraiment dans la, elle n'est pas utilisée, elle n'est pas déclarée, tu vois,parce que tant que tu l'utilises pas, en fait, elle n'est pas là, alors qu'en fait oui, dès que tucrées, dès que tu crées, elle est dans la mémoire, parce que tu utilises user ici, donc là on crée
01:08:15 :l'instance. Après celle-là, bon la première, c'est logique, c'est la variable globale, et aprèseffectivement, dès que tu crées une variable dans la fonction, tu crées une nouvelle, parce que làencore, effectivement, peut-être qu'on peut se dire ok, celle-là, est-ce que c'est, bon celle-làelle est différente en plus, là, s'ils avaient mis John ici, peut-être que ça aurait pu induire
01:08:37 :encore plus son erreur, dans le, ici, là, s'ils avaient mis John à la place de, à la place deJack, mais ouais, finalement, en fait, on en crée trois, on a bien celle-là qui est associée auxusers, celle-là dans l'espace global, et celle-ci qui est différente, parce qu'on a le scope,
01:08:51 :vraiment, de la fonction. Et après, effectivement, ça aussi, on pourrait revenir dessus, c'est desquestions qui reviennent souvent, là, sur le global, local, etc, c'est des mots-clés qui ne fontpas trop de sens, qui ont des conseils d'utiliser, c'est un peu comme le from, random, et tout, c'estpire que ça, parce que lui, le global, vraiment, je vois que des mauvaises, des mauvais cas d'usage,
01:09:18 :souvent c'est pour, justement, pallier une mauvaise compréhension de Python qu'on lesutilise, en fait, donc c'est vraiment un peu des incongruités qui sont, ouais, il faudraitvérifier, peut-être qu'il y a des cas de figure très précis, ou alors peut-être que c'est justeparce que c'est du legacy et ils l'ont jamais enlevé, mais en tout cas, de tout ce que j'ai
01:09:37 :vu, et de tous les codes que j'ai vu, je le vois jamais utilisé, quand je le vois utilisé,je vois les gens qui disent que c'est, voilà, que, enfin, les gens, en général, c'est, voilà,c'est pas une bonne utilisation. Le any, on l'a pas encore vu, vraiment, et j'en parle dans les
01:09:52 :formations, mais le any et all, ils sont assez pratiques, et donc, quelles sont les expressionsci-dessous qui retournent false ? Donc là, ce que j'aime bien avec cette question, c'est que ça fait
01:10:08 :appel à, justement, un peu de logique avec le not any ici, aussi un petit peu de, justement,de les types natifs, et puis juste après any, all, bon, c'est des mots anglais, faut savoir,faut se rappeler ce que ça veut dire et tout. Donc 1 et 3, là, effectivement, il peut y en
01:10:31 :avoir plusieurs de choisis. Donc, alberno dit 1 et 3, donc celle-ci, la première, et hop,1 de sûr. C'est ça, après, le problème, comme je vous le disais avec le tosa, c'est qu'il suffit
01:10:54 :que vous vous en oubliez un et vous avez faux à la question, quoi. Même si vous en avez 3 bonneset qu'il fallait en sélectionner 4, c'est foutu. Ok, alors on a pas mal de gens qui disent 1 et 3,
01:11:14 :1 et 2, ok, alors déjà, faut se rappeler, ou savoir ce que signifie any et all. Donc all,ça va retourner true si tous les éléments dans la liste sont vrais. Any, ça va retourner true si
01:11:29 :on a au moins un seul élément dans la liste qui est vrai. Donc, et là, et c'est là où c'est unpetit peu, voilà, sélectionnez les expressions ci-dessous qui retournent false. C'est un peu
01:11:39 :comme la semaine dernière, vous savez, là, on avait eu, moi-même, là, on s'était tous tapéla tête contre les murs avec l'inversion, la négation, là, laquelle ne retourne pas le bontruc et tout, avec le counter. Là, c'est un peu la même chose, c'est quelles expressions retournent
01:11:55 :false. Donc, est-ce qu'on a, donc, any retournerait true si on a au moins un élément dans l'ensemblequi est vrai. Là, est-ce qu'on a au moins un élément dans l'ensemble qui est vrai ? Non,
01:12:08 :donc celle-ci va effectivement retourner false. Donc ça veut dire que celle-ci, la première,elle est bonne. On va y aller, celle-là, on va la garder pour la fin, le note any. Là, ici,
01:12:20 :on a deux chaînes de caractère qui contiennent les éléments a et b, donc une chaîne de caractèrequi contient quelque chose, c'est vrai, c'est true, c'est évalué comme un bool et un vrai. Il y a
01:12:31 :juste la chaîne de caractère vide qui est évaluée comme false. Donc là, on a deux éléments true,donc il y en a au moins un des deux qui est vrai, donc ça veut dire que any de ça, ça va retournervrai. Donc celle-là, on l'élimine. Là, pareil, 2.0, un nombre qui n'est pas zéro est évalué comme
01:12:45 :vrai, donc on a au moins un élément qui est vrai, donc ça, c'est pas bon. Là, on n'a que deséléments vide, on a un top all vide, on a le none et on a une chaîne de caractère vide. Donc
01:13:00 :effectivement, ils sont les trois vides, donc pour que any soit vrai, il faut qu'il y en ait au moinsqui soit vrai. Là, c'est pas le cas. Donc celui-là, effectivement, on le coche. Et maintenant, donc
01:13:11 :le not any, là il faut y aller, il faut séparer les choses, comme souvent, comme je vous dis. Ilfaut faire les choses dans l'ordre. Donc on a ce premier ici. Donc 0, 1, 2, on a 0 qui va être
01:13:26 :false, 1 et 2 qui vont être true. Donc on a false, true, true, donc ça veut dire que any de au moinsun qui est vrai, ça va être true. Donc là, on a true, et not true, c'est quoi ? Ça va être false.
01:13:40 :Ok, donc not true, ça va être false, et les expressions qui retournent false, ça va être ça.Donc je vais vérifier maintenant si je me suis pas trompé. Heureusement.
01:13:54 :Je vais essayer de remettre mon, de recaler mon... Donc là, vous voyez, il faut vraiment y aller par,donc en fait, là, personne n'avait juste. Là, c'était 1, 2 et 3. Alors, est-ce que ça, je vois,
01:14:15 :il y a des gens qui doutent là. Est-ce que les explications sont claires ? Vous voyez, il fautvraiment y aller, il faut y aller dans l'ordre. Et pour le note any, il faut vraiment oublier le
01:14:26 :note au début, faites juste la vérification de ça, 0, 1, 2. Vous vous dites, ok, là, clairement, 0, 1, 2,il y en a au moins un qui est vrai, donc any de au moins un qui est vrai, c'est vrai. Note vrai, c'est false.
01:14:39 :Et là, effectivement, il faut toujours revenir sur le truc, c'est l'expression qui retourne false.Ouais, c'est ça, c'est vraiment un peu comme la semaine dernière où finalement, on avait perdu detête l'énoncé, on commençait à chercher, en fait, l'inverse de ce qu'il demandait, et après,finalement, on avait choisi les mauvais à cause de ça. Là, il faut vraiment se dire, ok, là, false.
01:14:59 :Donc, comme je vous disais, il faut se répéter le truc dans la tête. Est-ce que ça, ok, ça, çaretourne true ? Qu'est-ce qu'on nous demande qui retourne false ? Est-ce que ça retourne false ? Non,
01:15:08 :ça retourne true. Ok, on élimine, pareil, true. Est-ce qu'il y en a ? Ok, on élimine. Là, any,là, ça retourne false. Est-ce que ça retourne false ? Il faut toujours revenir quand vous faites
01:15:16 :des éliminations comme ça dans les quiz. Une fois que vous avez votre truc sur une question ici,vous savez ce que ça va retourner, ça va retourner false. Vous retournez là, qu'est-ce qu'il me
01:15:25 :demande ? Sélectionnez qui retourne false. On a dit que ça retournait false, ok, je coche. Il fautvraiment revenir tout le temps à l'énoncé, sinon vous allez vous perdre comme ça. Ok.
01:15:37 :Ensuite, celui-là aussi, ouais, intéressant. Je l'aime bien, lui.Donc, en fait, là, on veut inverser les clés et les valeurs dans un dictionnaire.Donc, quelles sont les bonnes réponses entre A, B, C et D ici ?
01:16:01 :Et là, toutes les affirmations exactes. Donc, il peut y en avoir plusieurs.Pas d'idées, les autres ?Alors, on reste encore 30 secondes. Ok, ok, ok, ok. Oui, j'avoue qu'il faut réfléchir un petit peu.
01:16:46 :Ok. Alors, on a, ok, gap, t'as changé, ouais. Donc, effectivement, là, si je ne me trompe pas,c'est A et B, je revérifie. Donc, le premier, ouais, le premier, assez clair. On crée un
01:17:41 :dictionnaire. On a l'ancien dictionnaire. On prend, donc, key value, KV, sur les items ici. Donc,on va récupérer juste la paire de clés valeurs. Donc, 1, ça va être ici, le 1, ça va être la
01:17:53 :clé et A, ça va être la valeur. Et ensuite, qu'est-ce qu'on fait dans notre nouveau dictionnaire ?On inverse. On dit que la valeur est égale à la clé. Donc, celui-là, effectivement, il est bon.
01:18:03 :Ensuite, lui, c'est un truc moins connu, c'est les compréhensions de dictionnaire. Donc,c'est comme les compréhensions de liste, sauf qu'on va faire un dictionnaire. Et donc, là,
01:18:13 :effectivement, c'est la façon que, perso, j'utiliserais, qui est la plus simple. D'ailleurs,on n'est même pas obligé de mettre les, je réfléchis là, mais je crois qu'on n'est pas obligéde mettre les parenthèses. Je vérifie. J'ai un petit doute avec ce qu'il montre. 1, hop, 2,
01:18:30 :2, comme ça. Donc, là, en fait, on fait une compréhension de dictionnaire avec les crochets.Ensuite, et là, toujours, je vais grossir un petit peu. Compréhension, vous dites,
01:18:41 :ok, vous faites déjà la boucle. Donc, là, je vais dire, ok, on va faire key value. Ok,ça fait un petit erreur. Donc, on fait notre, je vais, hop, ah merde, je peux pas, ok. Donc,
01:18:58 :on fait key, virgule, value, for, key. Oui, alors, on n'est même pas obligé de mettre,on peut faire, oui, ça dépend comment, oui, on va faire le key value for key value in. Et là,
01:19:13 :c'est pas, c'est comme ça. In, j'ai fait a.items, comme ça. Donc, vous voyez, en fait, c'est ladifférence avec les compréhensions de liste, c'est que la compréhension de liste, du coup,on a juste un élément. Donc, on va dire i pour i in a, et c'est tout. Ou i fois 2 pour i in a,
01:19:31 :par exemple. Là, on dit, donc, clé, deux points, valeur. Donc, là, si je fais ça,ça va rien changer. On va avoir exactement la même chose. Donc, ce qu'on peut faire,
01:19:39 :c'est tout simplement inverser les deux, value, key, comme ça. Et là, après, je peux fairen'importe quoi, je peux faire key fois 2, comme ça, et puis là, ça va doubler à chaque fois. Et
01:19:47 :vous voyez, là, on n'a pas besoin, bon, eux, ils ont mis des parenthèses ici, mais elles ne sontpas obligatoires, c'est ça que je voulais vérifier. Vous n'êtes pas obligé de les mettre. Ça
01:19:53 :fonctionne ici, mais ce n'est pas obligatoire. Donc, celui-là, il est bon aussi, c'est lacompréhension de dictionnaire, un peu moins connu, mais voilà, une fois que vous le savez,c'est vraiment la façon la plus optimale. Donc, vous voyez, celle-ci, si vous connaissez la
01:20:06 :compréhension de dictionnaire, vous pouvez assez facilement répondre. Après, les deux autres,donc, lui, la D, ça ne marche pas, parce que là, en fait, il nous fait V de K, mais il dit,en fait, ça ne marche pas cette notation, parce qu'on peut effectivement faire ça dans undictionnaire, dire, comme si je reprends là, on peut dire A de 3, par exemple, égale à 3,
01:20:29 :et ça va rajouter un élément dans mon dictionnaire, mais là, en fait, on ne le fait même pas. Là,on fait juste V de K, et on ne dit même pas à quoi c'est égal, et en plus, cette notation nefonctionne pas, on ne peut pas faire une assignation, quoique, j'ai un petit doute, je ne l'ai jamais
01:20:42 :fait, mais j'ai un petit doute, si je fais, donc, ça serait K de V, on va dire, égal à 5,for key V in A.items, on va essayer ça. Ouais, non, c'est ça. Vous voyez, on ne peut pas faire
01:21:00 :une assignation, voilà. Donc là, vous voyez, ça ne marche pas, en fait. La syntaxe n'est justepas bonne. Et celle-là, en fait, ça ne marche pas non plus, parce que là, en fait, vous allez
01:21:15 :créer un tuple, donc là, on le voit, parce que, voilà, ici, on a les parenthèses, et quand on ades parenthèses avec deux éléments séparés par une virgule, en fait, on fait un tuple, donc çane va pas. Donc, voilà, là, du coup, par élimination et par logique, c'est les deux premiers. Ok, on va,
01:21:30 :je regarde, ouais, ok, celui-là, bon, celui-là, c'est la petite prévision, on va le faire rapidement,les littéraux pitons int valides, on va le faire ensemble. Donc, le premier, est-ce que c'est un int ?
01:21:40 :Oui, que des nombres, c'est bon. Le deuxième, on a le x hexadécimal jusqu'à f, donc c'est bon,ça délague ? Ok, est-ce que d'autres, ça va ? C'est peut-être un valbi aussi, qui est un peu lourd des fois,
01:21:57 :alors je n'ai pas d'un doute. Ok, bon, les autres, ça a l'air d'être bon. Donc, le deuxième, il est bonaussi, parce que c'est un hexadécimal, avec le x ici, et on a des lettres de a à f,abcdef. Celui-là, c'est un binaire, donc il est bon aussi. Là, les virgules, ça ne marche pas, les
01:22:17 :virgules, c'est pour séparer des éléments, donc celui-là, non. Le tiret, il est bon, c'est pour la lisibilité,on n'a pas de virgule, donc il est bon aussi. Le 0, c'est un int, c'est bon. La chaîne de caractère, non.
01:22:27 :Le large int, c'était bon dans Python 2, mais dans Python 3, maintenant, tout est géré automatiquement,donc les langues, comme ça, ne sont plus valides, sachant que le test de Toza est réalisé avec Python 3,donc celui-là n'est plus valide dans la version du Toza. Ça, c'est un int, pardon, un float,
01:22:44 :donc il n'est pas bon non plus. Et celui-là, c'est un hexadécimal, mais on va au-delà de f,on a un g ici, et les hexadécimales, c'est jusqu'à f. Donc voilà, celui-là n'est pas bon non plus.
01:22:57 :Je vérifie, je ne me suis pas trompé, mais oui, c'est bon. Celui-là, celui-là, celui-là,ceux-là non, ceux-là oui. Ok, donc il en reste deux, on va faire les deux derniers quand même.
01:23:11 :Donc celui-là, intéressant aussi, quel est le moyen, je vais effacer les petits trucs,quel est le moyen le plus efficace de concaténer une liste de chaînes de caractère ? Donc là,
01:23:22 :autre petit truc d'optimisation. Donc là, vous avez, je ne sais pas si c'est clair,attendez, je vais, tac, c'est ça les différents choix. Un, deux ou trois ? Ok,
01:23:58 :tout le monde est sur le 3, ouais. Donc là, effectivement, vous avez raison, c'est le 3,parce que là aussi, on peut un petit peu y aller par élimination. Celui-là, en fait,
01:24:09 :ce qu'il faut comprendre, c'est que là, en fait, à chaque fois, vous allez recréer,parce qu'une chaîne de caractère, ce n'est pas modifiable. Donc quand on fait un plus égal,
01:24:17 :il y a une vidéo aussi là-dessus, sur Doxtring. Donc quand vous faites le plus égal, en fait,vous ne faites pas juste une addition, vous n'avez pas un objet muable sur lequel vousrajoutez des éléments, ce qui pourrait à la limite être un peu plus optimisé. Là,
01:24:30 :ce que vous faites, c'est que vraiment, vous recréez une chaîne de caractère à chaque fois,et du coup, ça fait que vous allez devoir recréer un objet en mémoire, et ça fait beaucoup,beaucoup d'opérations sur la mémoire, alors que le dernier ici, le join, en fait, vous faites une
01:24:44 :seule opération une fois, et donc vous créez une variable, et vous lui dites, tu fais justerassembler tout ensemble, donc c'est une seule opération, c'est plus efficace. Donc celui-là,
01:24:53 :ouais, vous avez bien identifié, donc ça va. Et le dernier, celui-là, alors là, il faut relier,alors bon, c'est pas très pratique là, ouais, c'est pas très pratique avec le chat, là, jepeux vous mettre, je vais vous mettre des tags, si je fais ça, je vais essayer, est-ce que je
01:25:16 :peux écrire, A, B, C, D, et là on va mettre 1, ok, donc je vous laisse un petit peu de temps,qu'est-ce que vous relier, relier, auriez, avec quoi ?
01:25:38 :Ok, bon, il y a beaucoup de réponses différentes, ok, on va les faire. Donc,bon, le split, il faudrait que je modifierais, on reviendra là-dessus, je vous montrerai lesdifférences entre le premier, là, et le premier, ici, entre celui-là, ici, et celui-là, ici,il y a une petite différence. Donc, le A, donc là, en fait, on a un premier espace au début,
01:27:04 :là il faut bien faire attention, il y a un espace ici, un espace à la fin, donc le premier,on peut déjà, on a un split, et quand on est sur le split, le split sans rien, ça va splitter surles espaces. Et là, donc, là aussi, vous pouvez un petit peu y aller par élimination, alors je
01:27:24 :vais vous montrer, c'est comme ça, il n'y en a pas beaucoup dans les Tosa, il y en a, ouais,j'en ai vu quelques-uns, mais c'est assez rare, où il faut relier. Donc, le premier, pourquoi ça va
01:27:37 :sur le 4, ici ? Parce que, et c'est la différence, justement, avec le split qu'on a ici, vous levoyez, celui-là, il va vers le 1, parce qu'en fait, chaque espace est considéré comme un élémentséparé. Et la différence, vous voyez, le premier, là, avec le split qui ne spécifie pas l'espace,
01:27:54 :il ne va pas prendre le premier élément. Donc, le premier élément, ici, qui est un espace vide,il ne va pas le mettre tout seul dans la liste. Alors, c'est pas qu'il supprime, tu vois,
01:28:05 :Salvatore, c'est pas qu'il supprime les espaces, parce que là, tu vois, pour le reste, quand il ya des mots, il va bien récupérer les éléments. Donc, il y a le strip, peut-être que tu confonds
01:28:17 :aussi strip, qui va enlever les espaces au début et à la fin d'une chaîne de caractère. Là,en fait, il va vraiment faire un split, il va séparer les éléments, mais il ne va pas récupérerun espace tout seul. Alors que, lui, quand on fait un split avec les espaces comme ça, là,
01:28:32 :vous voyez que tous les petits espaces, ici, qu'on a, donc là, c'est pas forcément très clairaussi avec leur... Mais bon, enfin, on comprend quand même qu'il y a plusieurs espaces, ici,
01:28:40 :et comme il n'y a qu'un élément, ici, de l'autre côté, qui a plein de petits espaces séparés,on comprend que c'est lui qui est relié. Et là, vous voyez, tous les petits espaces entre le all
01:28:50 :et over, il va les récupérer. Donc là, on a quatre éléments, ici, qui sont récupérés. Le the,donc là, effectivement, on va récupérer all, over, la virgule et world. Donc là, c'est un truc
01:29:00 :aussi qu'il faut bien comprendre avec le split, c'est que, du coup, on ne va pas récupérer l'élémentqui est dans le split. Donc, on va splitter sur le the, ici, et on va récupérer all, over,
01:29:11 :avec la virgule d'un côté. Alors, lui, c'est le the, oui, c'est ça. Oui, en fait, la virgule est là.C'est ça, c'est qu'on a un élément, ici, virgule, et un autre élément. Il faut bien faire gaffe,
01:29:24 :là, vous voyez, je n'avais pas vu, je pensais qu'il y avait all, over, la virgule et le world,c'est bien un premier élément, ici, comme ça, et ensuite, un deuxième élément, ici. Et donc,
01:29:35 :c'est normal, parce que le the, du coup, on ne le récupère pas, puisqu'on split dessus,et on récupère all, over, avec l'espace, et ensuite, l'espace world, après le the. Et ensuite,
01:29:45 :il reste celui-là, le T, pareil, on ne récupère pas le T, donc on va récupérer, ici, c'est leall, over, world, sans le T sur le H, et celui-là, il est relié à rien. Voilà,
01:29:57 :il n'y avait aucune façon de l'avoir. Donc, là aussi, voilà, il faut bien juste comprendre cettedifférence entre le split-là et le split-là, et une fois que vous savez ça, après les autres,ils sont assez simples. Si vous alliez par élimination, c'est assez facile à faire.
01:30:14 :Ok, ben voilà, du coup, finalement, on les a tous fait, ça fait le tour. Donc,il y en a encore plein plein d'autres, je pense qu'on en refera, parce que là,sur 15, 12, 13 étudiants, qu'on fait chacun 20, 25 questions, il y en a qui reviennent,mais il y en a quand même pas mal d'autres. Donc, on en refera, comme ça, d'autres sur
01:30:34 :d'autres questions, du coup, et je vais vous les faire réviser aussi, petit à petit,on y reviendra sur des notions comme ça. Donc, voilà, pour aujourd'hui, j'espère que ça vous
01:30:46 :intéresse, ces petits challenges comme ça, avec les corrections. Ah, Gab, on a une supplémentaire,une dernière. Ah, non, c'est pour la prochaine, sinon il n'y a pas de problème. Ah, ok, ok,
01:31:04 :ok, ok, bon, ok, ok, ben on regarde ça la prochaine fois. Elle n'est pas compliquée,mais avec du temps, elle est compliquée, quand tu as un timing, tu n'y arrives pas du tout. Ah,
01:31:12 :oui, avec le timer, oui, oui, oui. Ok, tu m'intrigues, envoie-la moi sur Discord,on la regardera la semaine prochaine, du coup. Ok, ok, ok, ok, ben ouais, envoie-moi sur Discord,
01:31:38 :je vais regarder ça. Ok, bon, ben voilà, n'hésitez pas, du coup, dans la semaine, si vous avezd'autres questions sur le Discord, je vais vous laisser, il y en a qui sont presque à jour surles tâches, mais comme je vous dis, je vais essayer de vous en rajouter peut-être une ou deux pour
01:31:56 :ceux qui sont vraiment à 100%, mais n'hésitez pas à revenir sur tout ce que vous avez fait,là je parle spécifiquement pour les gens qui sont sur le Toza, n'hésitez pas à revoir un petit peutout ça, à refaire, à vous entraîner, il faut vraiment que ça devienne une seconde nature sur
01:32:12 :les date time, sur les nombres entiers, sur tous les types natifs, les dictionnaires, sur lesautomatisations, manipuler les choses, moi je vous conseille vraiment de, comme je le fais làsouvent, c'est vraiment le meilleur moyen, vous vous faites un interprèteur, vous faites desdictionnaires, vous dites ok, tiens ça, moi j'ai fait ça, qu'est-ce que c'est ça, c'est un dict
01:32:30 :ou un set, je sais plus, ok, je pense que c'est un dict, et oui, c'est un dict, voilà, donc vousfaites des petits trucs comme ça, vous faites import date time, vous dites ok, là date time, qu'est-ceque j'ai dedans, etc, il faut apprendre à manipuler tout ça. Ouais Simon ? Ouais, c'est juste pour te
01:32:46 :demander comment tu fais pour cleaner ton idle ? C'est commande K sur Mac, je crois que tu peuxfaire clear, je sais plus, non ça c'est juste en dehors, là dans le bash, ouais, ici c'estjuste commande K, le commande K ça marche, ou contrôle K sur Windows, ça marche, c'est dans
01:33:09 :idle ou tu es dans un autre truc ? C'est le terminal là, mais le commande K il marche au niveau dubash et au niveau de Python, c'est un truc vraiment de terminal qui va clearer tout ce que t'as, etaprès dans le bash t'as clear aussi, qui n'est pas du coup dans Python, parce que clear c'est logique
01:33:29 :en fait, tu ne sais pas ce que c'est. Dans PowerShell tu dois avoir clear aussi, il estassez commun, moi j'ai mis C pour que ça aille plus vite, je me suis fait un petit alias.
01:33:43 :Bon bah écoutez, s'il n'y a pas d'autres questions, on va s'arrêter là, donc bonne...Est-ce que tu sais faire ça avec Idle ou pas ? Parce qu'à chaque fois j'essaye de repartir en haut de l'écran avec Idle et je n'ai jamais compris.
01:34:02 :Ça fait longtemps que je n'ai pas ouvert Idle. T'as pas un clear ici ?Shell, edit, option, non, file, ouais j'avoue je sais pas ici, moi je passe toujours par un terminal en fait.
01:34:26 :Bon non, le clear je l'essayais quand même, mais ça m'étonnerait. Contrôle K, commande K, non.Qu'est-ce qu'il y a d'autres défauts ? Non, c'est le seul que j'ai, ouais je sais pas dans Idle.
01:34:41 :Regarde, on va demander comment faire un clear dans Idle. Il n'y a pas de commande. Redémarrerle shell, ah oui c'est ça, tu peux oui effectivement. Ouais ouais tu peux effectivement, si je ne
01:34:59 :trompe pas, faire un new file en fait, où je pense que tu peux le restart ici. Shell, ouais c'est ça,restart shell. Mais ouais moi j'utilise toujours un terminal en fait. Je crois que c'est ce que
01:35:19 :je vais faire aussi maintenant. Ouais, t'as IPython si tu veux, moi j'aime bien IPython avec lacoloration syntaxique. D'ailleurs c'est vrai, je pourrais utiliser ça, là c'est un peu, ouais tu vois.
Aucune occurrence trouvée pour « ».