Code Avec Dave
Code Avec Dave
  • Видео 57
  • Просмотров 61 772
Une Des Plus Grosses Erreurs Faites Par Les Développeurs Intermédiaires
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com
Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Просмотров: 240

Видео

Le Plus Gros Problème Des Dictionnaires En Python
Просмотров 1,6 тыс.12 часов назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Les Fonctions D'ordre Supérieur : Tous Les Développeurs Doivent Comprendre Ce Concept
Просмотров 1,3 тыс.19 часов назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Cours Complet : La Récursivité En Python
Просмотров 276День назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Le Pattern Matching en Python, Une Alternative Incroyable aux Conditions
Просмотров 66414 дней назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Le Currying : La Puissance de la Programmation Fonctionnelle en Python
Просмотров 2 тыс.14 дней назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Les Décorateurs en Python Sont TELLEMENT Utiles
Просмотров 1,9 тыс.21 день назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Pourquoi Je Ne Peux Plus Me Passer Des Énumérations en Python
Просмотров 1,4 тыс.21 день назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Pourquoi Les Propriétés Sont Le Meilleur Décorateur en Python
Просмотров 1,5 тыс.21 день назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Les Dataclasses en Python Sont Incroyables, Voici Pourquoi
Просмотров 1,9 тыс.28 дней назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Si tu fais ça, ton code est de mauvaise qualité
Просмотров 770Месяц назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
FORMATION COMPLÈTE : Les Annotations De Type En Python
Просмотров 428Месяц назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Héritage et Abstraction, Un Code Simple Sans Effort en Python
Просмотров 169Месяц назад
Si tu souhaites devenir un expert de Python et apprendre à créer un code exceptionnel : developerssecrets.com Si tu veux rejoindre une communauté de développeurs actifs et motivés : discord.gg/vWxm6RWBFM
Comment Ajouter et Retirer des Rôles dans Discord.py V2
Просмотров 448Год назад
Comment Ajouter et Retirer des Rôles dans Discord.py V2
Comment Gérer les Erreurs de Commandes | Devenez un Expert discord.py Partie 16
Просмотров 378Год назад
Comment Gérer les Erreurs de Commandes | Devenez un Expert discord.py Partie 16
Tout ce que Vous Devez Savoir sur les Commandes Hybrides | Devenez un Expert discord.py Partie 15
Просмотров 746Год назад
Tout ce que Vous Devez Savoir sur les Commandes Hybrides | Devenez un Expert discord.py Partie 15
Tout ce que Vous Devez savoir sur les Slash Commands | Devenez un Expert discord.py Partie 14
Просмотров 2,1 тыс.Год назад
Tout ce que Vous Devez savoir sur les Slash Commands | Devenez un Expert discord.py Partie 14
All You Need to Know About Cogs | Become a discord.py V2 Expert Part 13
Просмотров 1,1 тыс.Год назад
All You Need to Know About Cogs | Become a discord.py V2 Expert Part 13
Comment créer un Bot Avancé | Devenez un Expert Discord.py V2 Partie 12
Просмотров 757Год назад
Comment créer un Bot Avancé | Devenez un Expert Discord.py V2 Partie 12
Créer une Commande d'Avatar | Devenez un Expert de Discord.py V2 Partie 11
Просмотров 434Год назад
Créer une Commande d'Avatar | Devenez un Expert de Discord.py V2 Partie 11
Tout ce que vous devez savoir sur les Embed | Devenez un expert de Discord.py Partie 10
Просмотров 820Год назад
Tout ce que vous devez savoir sur les Embed | Devenez un expert de Discord.py Partie 10
Créer une commande de Nick | Devenez Expert de Discord.py V2 Partie 9
Просмотров 377Год назад
Créer une commande de Nick | Devenez Expert de Discord.py V2 Partie 9
Créer une commande de slowmode | Devenez un expert de Discord.py V2 Partie 8
Просмотров 366Год назад
Créer une commande de slowmode | Devenez un expert de Discord.py V2 Partie 8
Créer une Commande de Mute et d'Unmute | Devenez un expert de discord.py V2 Partie 7
Просмотров 504Год назад
Créer une Commande de Mute et d'Unmute | Devenez un expert de discord.py V2 Partie 7
Créer une commande d'unban | Devenez un expert de discord.py V2 Partie 6
Просмотров 458Год назад
Créer une commande d'unban | Devenez un expert de discord.py V2 Partie 6
Créer une commande de kick | Devenez un expert de discord.py V2 Partie 5.5
Просмотров 474Год назад
Créer une commande de kick | Devenez un expert de discord.py V2 Partie 5.5
Créer une commande de ban | Devenez un expert de discord.py V2 Partie 5
Просмотров 1,1 тыс.Год назад
Créer une commande de ban | Devenez un expert de discord.py V2 Partie 5
Créer une commande de clear | Devenez un expert de discord.py V2 Partie 4
Просмотров 1,7 тыс.Год назад
Créer une commande de clear | Devenez un expert de discord.py V2 Partie 4
Apprenez à utiliser les converters | Devenez un expert de discord.py V2 Partie 3.5
Просмотров 786Год назад
Apprenez à utiliser les converters | Devenez un expert de discord.py V2 Partie 3.5
Tout ce que vous devez savoir sur les commandes | Devenez un expert de discord.py V2 Partie 3
Просмотров 2,5 тыс.Год назад
Tout ce que vous devez savoir sur les commandes | Devenez un expert de discord.py V2 Partie 3

Комментарии

  • @_eraserhead_9529
    @_eraserhead_9529 7 часов назад

    Salut j'ai une question stp, la cmd !compter fonctionne tres bien comme sur la video mais !echo ne marche pas et j'ai tout essayer

  • @tartanpion317
    @tartanpion317 2 дня назад

    Bonjour, Félicitations pour l'ensemble de tes contenus, présentation claire et pédagogique. Juste une remarque: à 11:25, tu expliques qu'il vaut mieux lever une erreur que renvoyer une valeur bizarre qu'il faudra traiter après coup, mais à 16:30, pour get_multiple_student_average(), tu fais exactement l'inverse: il serait nettement préférable de lever une erreur si aucun étudiant ne suit la matière, plutôt que de renvoyer 0 (la moyenne n'est pas 0, elle n'existe pas).

    • @codeavecdave
      @codeavecdave 15 часов назад

      Merci beaucoup ! Tu as complètement raison, j'aurais du renvoyer une erreur

  • @user-cs9tj1bi2g
    @user-cs9tj1bi2g 3 дня назад

    Pourquoi ne pas tout simplement créer une classe et accéder à ses attributs de manière traditionnelle ?? Je ne comprend pas ce qu’apporte ce concept appart risquer des Runtime exceptions en cas de type incompatibles.

    • @Seoxis-
      @Seoxis- 2 дня назад

      Les classes en python sont plus lourdes que des dict, donc si tu veux simplement représenter des valeurs, sans avoir besoin d'ajouter des méthodes spécifique pour cette classe, ou avoir besoin des méthodes type __add__, __sub__ etc.. Tu préfères utiliser des typedDict. Aussi, comme c'est des dictionnaire ca peut etre plus facile à intégrer avec du code existant qui utilise déjà des dictionnaires, plutot que de tout changer pour ca fonctionne avec des classes

    • @codeavecdave
      @codeavecdave 15 часов назад

      C'est exactement ça, ici le gros avantage des TypedDict est de pouvoir créer des structures de données simples qui sont basées sur les dictionnaires un peu comme les objets en TypeScript

  • @olivierbourdon2397
    @olivierbourdon2397 3 дня назад

    Concernant l'utilité de Required, peut être qu'il faut le mettre en perspective avec le total=False, comme ça même si les autres clefs sont optionnelles celle marquée Required est quant à elle obligatoire

    • @codeavecdave
      @codeavecdave 15 часов назад

      Oui c'est ça, je ne vois pas pourquoi je n'y avait pas pensé

  • @sylvainlavelle3783
    @sylvainlavelle3783 4 дня назад

    7:46 si tu définis total =false, les clefs sont toutes optionnelles, sauf celles ou tu indique required. Selon les cas cela peut être plus pratique que de rajouter des noterequired a presque tous les clefs

    • @codeavecdave
      @codeavecdave 15 часов назад

      J'y avais pas du tout pensé mais c'est évident quand tu le dis, merci beaucoup !

  • @louisant1817
    @louisant1817 4 дня назад

    Toujours des sujets très très pertinent

  • @orxo.-
    @orxo.- 4 дня назад

    Je me suis lancer il y a 2 jour c’est super intéressant tout c’est nouvelle notion merci ! 👍🏼

    • @codeavecdave
      @codeavecdave 15 часов назад

      Parfait ça, merci beaucoup ! Bon courage !

  • @Luffy_213_D
    @Luffy_213_D 4 дня назад

    j'adore. Bon courage

  • @Gael_AG
    @Gael_AG 4 дня назад

    C’est cool . C’est valable à partir de quelle version de python ?

    • @thuiop1
      @thuiop1 4 дня назад

      3.8 pour la base, certaines des features ne sont arrivées que plus tard par contre (Required et NotRequired en 3.11 par exemple).

  • @azd_azd
    @azd_azd 5 дней назад

    Très bonne vidéo comme à chaque fois, est-ce que tu compte aller sur les designs patterns au bout d'un moment ? (je pense que tu as pas mal de sujet avant d'arriver a du software engineering mais je prie pour que ça arrive plus tôt ^^)

    • @codeavecdave
      @codeavecdave 15 часов назад

      D'ici quelques semaines, je vais commencer à sortir des vidéos sur tous les design patterns les plus importants :)

  • @dragweb7725
    @dragweb7725 5 дней назад

    À force de lire mes commentaires sur chacune de tes vidéos, tu vas sûrement me trouver répétitif, mais je sais pas comment tu fais pour choisir le sujet de la vidéo à chaque fois dans le mille d'une lacune ou d'un concept à côté duquel je suis passé jusque là. C'est incroyable ce que j'apprends avec toi, j'ai vraiment l'impression d'être en train de faire passer mes connaissances en python au next level, merci pour ce que tu fais

    • @codeavecdave
      @codeavecdave 15 часов назад

      Franchement ça fait super plaisir de lire ce genre de commentaires ! C'est avec plaisir ! J'ai vraiment envie de créer un maximum de contenus pour expliquer les concepts les plus avancés de Python et de l'informatique en général donc j'espère que les prochaines vidéos pourront aussi t'aider ;)

  • @_viag
    @_viag 5 дней назад

    Super clair, je connaissais pas du tout les TypedDicts ! Est-ce qu'il y a un tuto de prévu sur les tests unitaires ? S'il y a bien une chose que j'arrive pas à saisir c'est ça :/ Encore une fois, merci pour ces vidéos super claires :)

  • @youloulou6591
    @youloulou6591 5 дней назад

    Parfait pour un bébé dev :)

  • @NoNames_tv
    @NoNames_tv 5 дней назад

    Hello, Quel est l’avantage des dataclasses par rapport aux TypedDicts présentés dans cette vidéo ?

    • @thuiop1
      @thuiop1 4 дня назад

      Ce ne sont pas des dictionnaires mais des classes, donc tu peux leur rajouter des méthodes, elles ont un __repr__ spécifique, ...

    • @AdrienBurg
      @AdrienBurg 4 дня назад

      @@thuiop1 Je me demande donc quel est l'avantage des TypeDicts vs les dataclasses... Personnellement j'utilises des dataclasses et je ne vois pas d'inconvénient pour l'exemple montré.

  • @dtamien
    @dtamien 5 дней назад

    Top ! C'est une extension qui vérifie les types ? Si oui laquelle ? Merci

    • @NoNames_tv
      @NoNames_tv 5 дней назад

      Tu peux utiliser Mypy

    • @azd_azd
      @azd_azd 5 дней назад

      Normalement c'est de base dans ton IDE, mais sinon c'est soit la librairie mypy ou pyright qui permet cela

  • @dragweb7725
    @dragweb7725 6 дней назад

    très intéressant l'abstraction, je me demandais en lisant le code de certaines bibliothèques python ce que signifiait cette classe ABC qui était importée sur des classes avec des méthodes "vides", grâce à toi je comprends mieux ! Par contre en général ceux qui font ça mettent souvent un "return NotImplemented" ou "return NotImplementedError" plutôt que "pass" afin d'avoir une vraie erreur de l'interpréteur lorsque la méthode est appelée directement je suppose, j'ai l'impression que chez toi tu as une erreur de mypy mais que si tu lançait le code en appelant Animal.bruit() ça fonctionnerait et n'afficherait juste rien. D'ailleurs, c'est quoi fondamentalement la différence entre NotImplented et NotImplementedError ? Si quelqu'un peut me conseiller là dessus je suis preneur

  • @FatRogSlim
    @FatRogSlim 6 дней назад

    C'est tout à fait le genre de truc qu'on a toujours fait sans savoir que ca avait un nom parce que... Bah rien à foutre du nom mdr

  • @dtamien
    @dtamien 7 дней назад

    merci pour les explications de map, reduce et filter

  • @ApprendreSansNecessite
    @ApprendreSansNecessite 7 дней назад

    Sur le plan de la pédagogie, je trouve ça un peu confusant. Comme je sense que tu aimes transmettre je vais prendre le temps de développer, mais je pense que ça peut aussi t'éclairer dans ton usage de la récursion. Tu représentes le problème comme une itération en décomposant les étapes du call stack (le fait de faire des print pour que l'apprenant voit où il en es est d'ailleurs très symptomatique de ça). C'est une façon classique d'enseigner la récursion mais je pense qu'elle va contre le paradigme et ne permet pas de gagner de la perspective. L'erreur que je vois tout le temps quand quelqu'un cherche à comprendre ou déboguer une fonction récursive, c'est de la dérouler dans sa tête. C'est une perte d'énergie, et je pense que cette pratique vient de cette technique d'enseignement et des habitudes de l'itération. Aussi, ça mène à des solutions récursives moins claires car trop impératives. Tu aurais pu rendre ton implémentation plus lisible par exemple en écrivant `if len(liste) == 0` ou `if not liste` (parce qu'une liste vide est falsy en python), et je vais expliquer pourquoi c'est plus lisible au delà de la cosmétique. Le principe de la récursivité, c'est d'implémenter le patron conceptuel "diviser pour régner". Ça se présente toujours de la même façon : "je ne sais pas résoudre X, mais je reconnais des sous-parties dans X que je sais résoudre en isolation et que je peux composer". Dans le cas de la somme d'une liste, en programmation fonctionnelle je ne peux pas itérer, parce que je ne peux pas maintenir un compteur mutable, par contre je peux additionner deux nombres et je peux extraire le premier élément et la queue d'une liste liée (le seul type de liste purement fonctionnel). C'est important de rappeler ces faits parce que autrement on trouve (à raison) arbitraire et inutilement compliqué d'utiliser la récursion pour faire une somme. La récursion résout toujours un problème, parfois purement récursif, d'autres fois simplement plus élégamment exprimé de façon récursive, mais il faut le nommer ce problème. Ce n'est pas un outil technique mais conceptuel. Donc, je peux décomposer le problème en deux cas : soit j'ai un cas trivial dont je connais la solution, c'est à dire la somme d'une liste vide (qui vaut 0), soit j'ai un cas problématique, c'est à dire la somme d'une liste non-vide, et là je dois me rapprocher du cas trivial, donc je vais en extraire un élément que je peux additionner. Reste à composer ces deux parties de solution en exploitant le fait qu'en programmation fonctionnelle on peut toujours substituer une expression par son résultat (parce qu'il n'y a pas d'effets secondaires) et c'est là que j'implémente l'appel récursif dans mon addition pour additionner le nombre que j'ai extrait, au résultat de l'appel récursif dont je sais qu'il sera 0 pour le cas de base, donc je retourne toujours un nombre. Du coup, pourquoi c'est pas bien de dérouler une fonction récursive dans sa tête ? Parce que la raison d'être de ce patron conceptuel c'est de ne pas avoir à le faire. On a juste besoin de penser au cas simple, à la façon de transformer le cas compliqué en cas simple, et à la façon dont les deux se composent. C'est purement déclaratif, pas impératif. Une fonction récursive non triviale est quasi impossible à dérouler dans sa tête (surtout quand il y a plus de 2 cas ou quand il y a du ping-pong entre plusieurs fonctions), et je ne compte plus les commentaires de développeurs frustrés qui pestent contre la récursion parce qu'ils ne savent pas lire du code récursif..

  • @dragweb7725
    @dragweb7725 8 дней назад

    excellente introduction pour map, filter et reduce, j'utilise déjà map et filter quotidiennement mais reduce j'avais du mal à saisir la logique derrière. En les présentant de cette façon je me rends compte à quel point les 3 sont similaires

    • @ApprendreSansNecessite
      @ApprendreSansNecessite 7 дней назад

      En fait reduce est fondamentalement différent, mais c'est peut-être un peu moins apparent en python parce que map ne retourne pas une liste quand tu lui donnes une liste, alors qu'il "devrait" (en tout cas s'il veut s'appeler "map"). Reduce est un catamorphisme, c'est à dire qu'il détruit la structure de départ pour te permettre d'en extraire les valeurs, alors que map te retourne la même structure avec les valeurs modifiées. Le hic quand on implémente reduce sur une collection (parce que c'est pas obligé) c'est qu'une collection a plusieurs valeurs, or tu ne peux pas retourner plusieurs valeurs à moins de les mettre dans une nouvelle structure ou de les résumer à une seule valeur. C'est donc ce qu'on fait quand on utilise reduce : Soit on définit un accumulateur initial qui va être la nouvelle structure que l'on remplit incrémentalement ; Soit on réduit les valeurs à une seule valeur. Raisonner de façon abstraite lorsqu'on utilise reduce est la seule façon de bien l'utiliser. C'est une abstraction très puissante quand tu la couples aux monoïdes et semi-groupes. Si tu l'interprètes comme une façon bizarre d'itérer, il vaut mieux simplement boucler

  • @ApprendreSansNecessite
    @ApprendreSansNecessite 8 дней назад

    J'ai remarqué que mypy perdait régulièrement les pédales avec match/case. Le seul moyen de s'en sortir c'est d'utiliser des conditions avec isinstance. J'espère que ce sera réglé un jour. Si non c'est triste que ce ne soit pas une expression, mai bon voilà c'est python...

  • @olivierbourdon2397
    @olivierbourdon2397 9 дней назад

    Super video tres informative. Par contre, maintenant entre les proprietes et/ou dataclass, ca serait super que tu combines cette video et celle sur les dataclass pour eventuellement expliquer si on peut combiner les 2 ou pas. J'avoue n'avoir aucune idee sur la question et peut etre meme que ma requete ne fait pas de sens.

    • @codeavecdave
      @codeavecdave 9 дней назад

      C'est une très bonne idée et c'était prévu de développer une vidéo pour regrouper les deux. Merci beaucoup !

  • @progmaths
    @progmaths 10 дней назад

    Très bonne vidéo, dense en informations. Comment vous-êtes vous formé sur Python : simples tutos/vidéos ou cursus précis (fac) ? Et quelle durée approximative pour arriver à ce niveau ?

    • @codeavecdave
      @codeavecdave 9 дней назад

      Merci beaucoup ! J'ai commencé l'informatique il y a 4-5 au lycée puis j'ai continué en fac d'informatique. La réalité est que je n'ai pas appris grand chose dans dans ces formations, la majorité de mon apprentissage a été dans les livres pour les concepts de développement de logiciels de haute qualité et les documentations officielles pour les langages de programmation et les librairies

  • @Sql37
    @Sql37 11 дней назад

    Ta présentation et tes explications sont bonnes mais il nous manque le pourquoi : un exemple ou un cas d'usage. Merci à toi pr le partage

  • @sebastientetaud7485
    @sebastientetaud7485 11 дней назад

    clean gg :)

  • @user-xx1kq6ot7i
    @user-xx1kq6ot7i 11 дней назад

    Faut faire des essais pour s'habituer mais ceci dit c'est super bien expliqué merci

    • @codeavecdave
      @codeavecdave 9 дней назад

      Oui c'est pas facile au début. Merci beaucoup !

  • @samuelwaller7013
    @samuelwaller7013 11 дней назад

    pitié faut baisser le volume de la musique c un crime là

    • @codeavecdave
      @codeavecdave 11 дней назад

      Ouais j'avoue c'était horrible

  • @axio360
    @axio360 12 дней назад

    Oué bah c'est un switch quoi

  • @dragweb7725
    @dragweb7725 12 дней назад

    Excellente vidéo qui montre très bien un cas concret d'application de la SRP, ça m'a vraiment aidé à mieux comprendre à quel point il ne faut pas avoir peur de définir une multitude de petites pièces de puzzle pour les assembler ensuite plutôt que de tout faire en bloc

    • @codeavecdave
      @codeavecdave 11 дней назад

      Merci beaucoup ! On peut parfois se dire que c'est inutile de créer trop de petites pièces mais le plus souvent ça crée un code plus simple à comprendre et qui est surtout bien plus maintenable

  • @antoniopisanello440
    @antoniopisanello440 12 дней назад

    Par contre il faut noter quand même que les enums ne t’empêchent pas de faire ticket.status = "abc". Techniquement, c’est toujours faisable, les joies de python 🙃

    • @codeavecdave
      @codeavecdave 11 дней назад

      Oui ça reste possible de faire encore n'importe quoi sans erreur de compilation. Malgré tout, on aura quand même des erreurs dans l'IDE ce qui est le plus souvent suffisant

  • @vincentapach3697
    @vincentapach3697 13 дней назад

    Bonjour merci pour ton partage c est super, tu fais des cours sur des plate-forme style Udemy ?

    • @codeavecdave
      @codeavecdave 11 дней назад

      Merci beaucoup ! Udemy ne me laisse pas créer de formations gratuites plus longues que 2 heures donc je suis en train de développer une plateforme pour apprendre Python complètement gratuitement

  • @majvax
    @majvax 15 дней назад

    J'ai un exemple concret du currying que j'ai utilisé pour mon grand oral: def calculer_function_quadratique(A: Point, B: Point, C: Point) -> Callable[[int], int]: a = A.y / ((A.x - B.x) * (A.x - C.x)) + B.y / ((B.x - A.x) * (B.x - C.x)) + C.y / ((C.x - A.x) * (C.x - B.x)) b = - (A.y * (B.x + C.x) / ((A.x - B.x) * (A.x - C.x)) + B.y * (A.x + C.x) / ((B.x - A.x) * (B.x - C.x)) + C.y * (A.x + B.x) / ((C.x - A.x) * (C.x - B.x))) c = A.y * B.x * C.x / ((A.x - B.x) * (A.x - C.x)) + B.y * A.x * C.x / ((B.x - A.x) * (B.x - C.x)) + C.y * A.x * B.x / ((C.x - A.x) * (C.x - B.x)) return lambda x: int(a * x**2 + b * x + c) On a une méthode d'interpolation numérique et ici utiliser le currying permet réellement d'avoir un code plus performant et d'éviter un grand nombre de calcul inutile.(j'appelle cette fonction un peu moins de 2000 fois) A mon avis si une personne doit utiliser partial pour utiliser à la fois la méthode de manière "normale" et de manière "currying", je pense qu'il y a un problèmes d'architecture du code. Je reste ouvert au critique sur ce point cependant. Ceci dit très bonne introduction à ce sujet qui fait parfois peur tellement il est peu compris des personnes programmant uniquement en orienté objet. J'aurais cependant choisis un exemple plus parlant puisque celui ci paraît très inutile comme tu l'as dit. Ça ne fait pas bonne pub à un outil si utile😅

    • @codeavecdave
      @codeavecdave 11 дней назад

      Merci beaucoup ! Je vais prendre en compte cet exemple pour une future vidéo sur le sujet

  • @sportKO12
    @sportKO12 15 дней назад

    Tu utilise quoi pour capturer ton écran et avoir ton image rond à coter comme ça, j'ai trop aimer !!

  • @dtamien
    @dtamien 16 дней назад

    Merci

  • @merlin2600
    @merlin2600 16 дней назад

    Les enums avec des valeurs en int, je trouve ça très peu pratique. Heureusement, Python supporte ça: class Status(Enum): OPEN = "open" CLOSED = "closed" Quand on veut passer d'une str à l'enum, il suffit de faire Status(api.new_status) et c'est très bien. Django fonctionnait historiquement avec des choices: OPEN = "open" CLOSED = "closed" STATUS_CHOICES = ( (OPEN, "Open"), (CLOSED, "Closed"), ) Maintenant, on peut utiliser des enums aussi mais je trouve que ça reste assez clunky comme intégration. Par contre, Graphene ne m'a apporté que des problèmes avec les enums.

  • @Sql37
    @Sql37 17 дней назад

    Salut! Merci pr le partage, c'est cool tu abordes des choses méconnus des débutants, mais pr ns permettre de mieux comprendre l'utilité du truc je pense qu'il serait bien d'ajouter un cas pratique plus complexe

    • @codeavecdave
      @codeavecdave 17 дней назад

      Oui c'est vrai tu as raison, dans tous les cas je pense que je ferais une nouvelle version de cette vidéo plus développée et cette fois ci il y aura un exemple plus complexe et concret

  • @PstMrtem
    @PstMrtem 17 дней назад

    Hello, super video ! Ça serait cool de zoomer un peu dans l'ide parce que sur téléphone c'est assez dur de lire le code 😄

    • @codeavecdave
      @codeavecdave 17 дней назад

      Merci beaucoup ! Je ferais en sorte de zoomer encore plus dans les prochaines vidéos que je tourne

  • @ApprendreSansNecessite
    @ApprendreSansNecessite 17 дней назад

    En fait en fonctionnel tu appellerais `logging(add)(1, 2)` (ou `logging('message')(add)(1, 2)` du coup). Et ce avec la même implémentation que ton décorateur, parce qu'un décorateur de fonction, c'est juste du sucre syntaxique pour écrire une fonction d'ordre supérieure qui s'appelle elle-même. Personnellement je ne suis pas fan des décorateurs en programmation fonctionnelle parce que la version non décorée de ta fonction n'existe pas et ne peut donc pas être réutilisée ailleurs. Or on aime bien écrire des fonctions génériques et les composer en FP, mais pour tout ce qui est méta-programmation (du genre dataclass) c'est parfait. Concernant l'annotation de type, je viens de découvrir `typing.ParamSpec` qui te permet d'écrire un générique pour les paramètres, en conservant le nom des paramètres, donc en utilisant un TypeVar ReturnType et un ParamSpec Params, tu peux annoter ton décorateur avec un `Callable[Params, ReturnType]`, et là ça commence à devenir chouette. Si non même commentaire que pour le currying.

  • @RisitopLeVrai
    @RisitopLeVrai 17 дней назад

    Hello, merci pour cette initiative de présenter différents patterns avancés en python, c'est top d'avoir le courage de sa jeter à l'eau et de démarrer une chaîne technique ! Petite suggestion, ce serait cool je pense de réfléchir à démontrer la puissance du pattern dans une petite situation pratique, pour montrer que ce n'est pas juste plus compliqué pour le plaisir de faire plus compliqué. Pour le currying, il s'agirait de montrer clairement à travers un petit exemple pourquoi manipuler f(a, b) peut être moins pratique que manipuler f(a)(b). Par exemple si l'on souhaite utilise la fonction map() de python pour ajouter une extension (variable) à un ensemble de noms de fichiers, ce sera probablement plus simple et clair avec ce pattern qui permettra de faire map(add_ext(".txt"), names), map(add_ext(".json"), names) etc. plutôt que de passer par des lambda fonctions. Également peut-être de montrer qu'on peut ajouter un peu de logique dans la fonction de retour en fonction de l'agument ? Juste quelques idées comme ça, en tous cas merci pour le contenu c'est cool !

    • @codeavecdave
      @codeavecdave 17 дней назад

      Merci beaucoup ! Je prends note de tout ça, je pense que je ferais plus tard une vidéo plus avancée sur ce concept qui expliquera plus en détail comment l'utiliser dans un cas concret

  • @ApprendreSansNecessite
    @ApprendreSansNecessite 17 дней назад

    Ce qui m'ennuie avec `partial` c'est que l'intellisense perd le docstring et la signature, en tout cas dans VS Code avec Pylance. Si je survole ta fonction ça me dira `partial[int]`, ce qui n'est pas du tout utile. À ce sujet, je déconseille d'annoter la valeur de retour de `ajouter_currying`. Déjà ça sert à rien, et puis si tu fais ça l'intellisense perd le nom des paramètres de `ajouter_b` D'un autre côté, j'ai vraiment du mal à utiliser le currying en python à cause du manque de support syntaxique, Si au moins on pouvait écrire `return def`. On a l'impression qu'une fonction currifiée est très compliquée alors que pas du tout, et essayer de l'exprimer avec des lambdas est non-seulement pire syntaxiquement, plus complexe au niveau des type hints, mais aussi très limitant parce que l'implémentation d'une lambda doit se limiter à une seule expression. Habituellement, j'utilise beaucoup le currying pour passer des dépendances à certaines fonctions avant de les injecter dans mon programme. C'est aussi très pratique lorsque l'on utilise un style tacite pour composer des fonctions ou utiliser des prédicats : on applique tous les paramètres sauf le principal, qui fait partie du pipeline. Mais pour que ce style ait un intérêt au niveau de la lisibilité, il faut que écrire des fonctions currifiées soit simple. Or en Python, j'ai l'impression que ça ne vaut pas le coup.

    • @codeavecdave
      @codeavecdave 17 дней назад

      Oui `partial[int]` ne donne aucune information et j'avoue que c'est peu pratique. J'espère que ça pourra s'améliorer dans le futur

  • @ApprendreSansNecessite
    @ApprendreSansNecessite 17 дней назад

    Je pense que c'est plus pratique et safe de faire ça au niveau du système de type: `Priority = Literal['low'] | Literal['medium'] | Literal['high']` - Une union te donne plus de confort au niveau de l'auto-complétion parce que tu n'as que 3 suggestions (et pas tous les attributs et méthodes de ta class Priority). - Elle te donne aussi plus de confort et de sécurité si tu utilises match/case, parce qu'à chaque `case` que tu ajoutes, la liste des suggestions va se réduire (même si mypy ne check absolument pas l'exhaustivité ou la répétition des cases) - Utiliser des valeurs numériques automatiques est embarrassant quand tu dois ajouter une valeur intermédiaire, du genre 'medium-high': avec une énumération ça va incrémenter 'high', ce qui veut dire que tu ne dois jamais faire persister un enum en utilisant sa valeur numérique, il faut donc prévoir une étape de conversion en string supplémentaire quelque part. Pour aller plus loin, une union de types (ou type somme) permet d'avoir une approche fonctionnelle qui bénéficie du fait que l'état de ton Ticket peut être représenté au niveau des types pour rendre les états illégaux impossibles à représenter sans te faire engueuler par ton IDE (à condition de créer des Tickets immutables, donc des "value objects") Par exemple tu pourrais, au niveau du système de type, rendre impossible de fermer un ticket qui n'est pas dans l'état 'in progress' ; tu pourrais rendre impossible la création d'un ticket qui soit à la fois 'low' et 'closed' (Ça n'a pas de sens ici mais quand tu as deux états orthogonaux il arrive souvent que certaines combinaisons soient illégales) ; ou plus simplement tu peux rendre illégal le fait d'appeler une fonction `next()` sur un Status 'closed' parce que 'open' n'est pas la suite logique de 'closed'. Au contraire, gérer un overflow sur un enum avec un modulo, ça peut être traitre. Pour faire ça en Python, j'ai l'impression que le plus propre c'est de refactor ton union comme ceci: `Priority = Low | Medium | High` avec des alias pour chaque valeur (`Low = Literal['low']`, etc.) que tu peux utiliser comme type hint dans des fonctions. Le système de type de Python a beau être immature, il a déjà mieux à proposer que l'approche OOP classique.

    • @codeavecdave
      @codeavecdave 17 дней назад

      C'est un raisonnement que j'essaye d'utiliser de plus en plus dans mon code parce que c'est une solution simple mais beaucoup plus puissante. En soi, même si le but de la vidéo était de présenter les énumérations, en production je pense que ta solution serait meilleure et plus maintenable

    • @codeavecdave
      @codeavecdave 17 дней назад

      J'ai épinglé ton commentaire pour qu'un maximum de personne le voit

    • @ApprendreSansNecessite
      @ApprendreSansNecessite 17 дней назад

      Petit addendum, j'ai remarqué que en tout cas sur VS Code avec Pylance et typing.TypeVar + typing.Generic, tu ne peux pas avoir d'auto-completion sur une contrainte de type quand tu instancie une class. Tu as bien des erreurs quand tu mets la mauvaise valeur, mais c'est pas méga pratique. J'espère que ce sera réglé avec l'implémentation de PEP 695. parce que si tu veux définir une méthode ou une fonction `close(self: 'Ticket[Priority, InProgress]')` il te faut absolument des génériques

  • @daeltam
    @daeltam 19 дней назад

    Je viens d'avoir des problèmes de synchronisation et une discussion sur le discord officiel m'a permis de comprendre pourquoi il ne fallait pas self.tree.sync() chaque chargement du bot, je vous mets les explication de la documentation en dessous (en anglais) pour faire court il s'agit de problèmes de ratelimit par discord et il vaut mieux le faire manuellement avec une commande

    • @daeltam
      @daeltam 19 дней назад

      Auto Syncing (your command tree) Sucks, and here's why: Syncing your command tree automatically causes extra unnecessary requests to be made, this is because you only need to sync when commands are updated. *see ?tag whensync for a more nuanced list on when to sync. What syncing does is send your commands to discord for one guild or globally. If you haven't changed your command's descriptions, added/removed commands, changed names, parameters, etc. you shouldn't sync, since you'd only be updating discord with the commands they already have without doing any changes, which is pointless and a waste of an API request to a limit with an already tight rate limit. *see ?tag whatsync for a more nuanced on what syncing is, and how to do so. Oh and also, syncing your tree sometimes breaks discord, making commands not pop up for users until they restart their discord client, switch channels, or any other mysterious random events, which just inconveniences the end users of your bot for no reason. Where should I sync instead? It's better to sync using a normal (message) command (or even an on_message if you prefer Client) You can even use just a simple eval to do so. *for example:?tag umbras sync command or the jsk sync command from the debugging tool Jishaku (see ?tag jsk) *But I don't have the new message content intent... What now? Bots can still receive message content when the bot is mentioned in it, or in DMs! You could set the bot prefix to commands.when_mentioned *Oh, and if you're one of those people who restarts their bot very frequently instead of using extensions and reloading them, this could cause rate limit issues too. (see ?tag extensions)

    • @daeltam
      @daeltam 19 дней назад

      Sync when you... Basic Added/Removed a command Added/Modified/Removed autocomplete (decorator, transformer) Added/Removed an argument Added/Modified/Removed locale strings Converted the global/guild command to a guild/global command Modify Changed a command's... name (name= kwarg, function name) description (description= kwarg, docstring) Changed an argument's... name (rename decorator, param name) choices (Literal, choices decorator, enum type) description (describe decorator, docstring) type (arg: str str is the type here) Permissions Added/Modified/Removed permissions: default_permissions (decorator, kwarg) nsfw (kwarg) Changed installs or contexts (decorators): allowed_installs allowed_contexts guild_install, user_install, guild_only, dm_only, private_channel_only Do not sync when you... Changed anything in the command/autcomplete function's body (after the async def (): part) Added/Modified/Removed library side checks: (@)app_commands.checks... (@)commands...(.check) @app_commands.checks.(dynamic_)cooldown(...) This is the same for hybrid app commands

    • @codeavecdave
      @codeavecdave 17 дней назад

      Très intéressant, j'en parlerais quand je ferais une nouvelle formation sur discord.py

  • @Le_first_glitcheur
    @Le_first_glitcheur 19 дней назад

    Quelle est ton extension pour les flèches et tes égals

    • @louislecouturier
      @louislecouturier 18 дней назад

      c'est un parametre appelé "ligatures". Par contre ça ne marche pas avec toutes les fonts. Perso j'utilise JetBrains Mono et elle les integre 😉

  • @zugwang9496
    @zugwang9496 20 дней назад

    T'es génial continue l'équipe Jsais pas ce qu'y t'as pris y a 3 semaines mais tu bombardes Jviens d'voir y a pas encore de commentaire te démotive pas Super vidéo L'algo met bien c'est rare 💜

    • @codeavecdave
      @codeavecdave 17 дней назад

      Merci beaucoup ! Ca fait super plaisir !

  • @dragweb7725
    @dragweb7725 21 день назад

    mais c'est tellement pratique comme feature ! j'ai actuellement un projet qui serait pas mal simplifié en introduisant ces énumérations aux bons endroits, merci beaucoup pour le tips !

    • @codeavecdave
      @codeavecdave 21 день назад

      Avec plaisir ! Tu verras, ça va vraiment te faciliter la vie

  • @LaSculleFCS
    @LaSculleFCS 21 день назад

    Meilleure chaîne de code FR que j'ai vue depuis le début

    • @codeavecdave
      @codeavecdave 21 день назад

      C'est super gentil ! Merci beaucoup !

  • @solagan7402
    @solagan7402 22 дня назад

    Super vidéo 👍 Pourrais tu faire des vidéos sur les bases de la POO en python ?

    • @codeavecdave
      @codeavecdave 21 день назад

      Merci beaucoup ! Je suis en train de travailler sur une formation complètement sur tous les concepts de POO qui va commencer sur les bases jusqu'aux concepts les plus avancés que je publierais sur RUclips

    • @dragweb7725
      @dragweb7725 12 дней назад

      je plussoie cette idée, l'utilisation des classes n'est vraiment pas intuitive quand on débute en python

  • @solagan7402
    @solagan7402 22 дня назад

    Super vidéo 👍 Pourrais tu faire des vidéos sur les bases de la POO en python ?

  • @karinek6808
    @karinek6808 23 дня назад

    Merci, c'est super instructif. Si tu as le temps un de ces quatre, pourrais tu faire une video explicative sur l'asynchrone/synchrone ? c'est un peu Cho comme concept pour moi mais comme tu explique vraiment bien

    • @codeavecdave
      @codeavecdave 21 день назад

      Merci beaucoup ! Je pense que je ferais une grosse vidéo sur ce concept parce que c'est super important à comprendre mais c'est sûr que je vais faire des vidéos dessus