05:48 <discord_afpy> <foxm4sk> @melcore 💪
        07:46 <debnet> Bonjour.
        08:54 <z4c> Matin martin !
        08:55 <z4c> debnet: alors t'es a Paris pour aller voir Gandi ou pas encore ? 
        08:56 <debnet> Not yet. J'ai pas eu l'occasion.
        09:01 <z4c> Tu le diras histoire de trouver une occasion pour 🍻 
        10:46 <debnet> Avec plaisir !
        12:57 <alain_afpy> L'installation et la distribution de paquets Python (2/4) - https://linuxfr.org/news/l-installation-et-la-distribution-de-paquets-python-2-4
        16:12 <discord_afpy> <aster30999> j'écris des dizaines de lignes de codes à cause de cette lacune, et là ça devient de moins en moins lisible
        16:33 <misc> de cette lacune ?
        16:35 <discord_afpy> <aster30999> mon msg précédent n'est pas passé sur irc ?
        16:44 <merwyn> Nope :(
        16:55 <misc> en fait, ça devient tellement pas lisible qu'on peut pas lire le message :p
        16:59 <discord_afpy> <aster30999> https://paste-bin.xyz/8110980 pour irc
        17:03 <misc> mhh
        17:03 <misc> donc, tu veux résoudre quel probléme exactement avec ce code ?
        17:04 <discord_afpy> <aster30999> ben je veux pouvoir une variable en guise de méthode/fonction
        17:04 <misc> (parce qu'une solution serait de changer "profile", pour être un dict)
        17:05 <misc> (mais c'est peut etre pas faisable)
        17:05 <misc> sinon, y a __call__ 
        17:06 <discord_afpy> <aster30999> non c'est pas faisable. Mais le soucis se pose dans d'autre cas. Dans Django, les éléments de la db sont accessibles via Table.field. Et souvent j'ai besoin d'accéder à plusieurs 
        17:07 <discord_afpy> <aster30999> 
        17:08 <entwanne> Tu as la fonction getattr pour accéder à l'attribut d'un objet
        17:09 <entwanne> getattr(foo, 'bar') est équivalent à foo.bar
        17:12 <entwanne> Et pour un besoin répété tu peux aussi avoir attrgetter du module operator : `get_bar = attrgetter("bar"); (get_bar(foo), get_bar(oof))` est équivalent à `(foo.bar, oof.bar)`
        17:15 <discord_afpy> <aster30999> getattr pourrait suffir. Je vais tenter de voir si ça marche avec les classe dans django
        17:15 <discord_afpy> <aster30999> merci pour les pistes. Et sinon ce que je veux faire, cad utiliser les éléments d'une liste en tant que méthode, ce n'est pas possibel ?
        17:25 <entwanne> Ce n'est pas possible comme tel mais c'est possible avec attrgetter, définir une liste d'objet attrgetter, itérer dessus et les appeler sur tes objets pour obtenir les valeurs des attributs
        17:29 <entwanne> ```python
        17:29 <entwanne> fields = [attrgetter("graph_machin"), attrgetter("graph_truc")]
        17:29 <entwanne> for f in fields:
        17:29 <entwanne> if v := f(request.user.profile):
        17:29 <entwanne> print(v)
        17:29 <entwanne> ```
        17:41 <discord_afpy> <aster30999> je comprends pas du tout ta notation
        18:03 <Mindiell> c'est du python tout bete pourtant
        18:03 <Mindiell> ?ACTION sort de 3j  de grippe?
        18:04 <discord_afpy> <aster30999> ben j'ai pas le niveau, désolé. C'est comme les boucles for sur une seule ligne, je ne les retiens pas : ni leur nom, ni leur construction ...
        18:06 <Mindiell> eh bien, en utilisant attrgetter, il parcourt une liste qui te permet, pour chaque champ (fields) de gérer leurs attributs (graph_machin et graph_truc)
        18:06 <Mindiell> et il les print juste
        18:07 <Mindiell> ne connaisssant pas attrgeter, j'aurai fait la liste des champs et fait : 
        18:08 <Mindiell> for f in fields:
        18:08 <Mindiell> if v := getattr(request.user.profile, f)
        18:08 <Mindiell> mais ça revient au même je dirais 
        18:08 <Mindiell> (avec fields = ["graph_truc", "graph_machin"])
        18:09 <discord_afpy> <aster30999> c'est le := que je ne comprends pas
        18:10 <Mindiell> ah
        18:10 <discord_afpy> <aster30999> mais j'ai la doc 🙂
        18:10 <Mindiell> c'est une notation récente appelée "walrus" (parce que çaressemble aux dents d'un morse)
        18:11 <Mindiell> ça signifie que si le test "if" est vrai, alors v est utilisable
        18:11 <Mindiell> ça évite le :
        18:11 <Mindiell> v = fonction_imporbable(argument_foireux)
        18:11 <Mindiell> if v:
        18:11 <Mindiell> là tu fias directement :
        18:11 <Mindiell> if v := fonction_imporbable(argument_foireux):
        18:12 <Mindiell> c'est tout bête et pas obligatoire
        18:13 <entwanne> Mindiell: Si le if n'est pas vrai, v est tout autant utilisable d'ailleurs
        18:14 <Mindiell> euh
        18:14 <Mindiell> mais son scope est limité au if non ? Donc tu l'utiliserais comment ? via un else ?
        18:15 <Mindiell> mais sortie du scope du "if", le "v" est nettoyé, on est d'accord ?
        18:15 <discord_afpy> <aster30999> ha ouais intéressant, parce que les if dans les if juste pour vérifier un truc, on en consomme
        18:16 <discord_afpy> <chadys> de mémoire le "v" ne sera pas nettoyé, comme pour un `for i in [1,2]`, le "i" vaudra bien 2 une fois sorti de la boucle
        18:16 <Mindiell> et donc pour reprendre au plus près le code d'aster30999, j'aurais plutôt fait ça : https://wyz.fr/8S-2H
        18:17 <Mindiell> ah ben j'en apprends tous les jours, merci !
        18:17 <Mindiell> ici le "attrgetter" ne me semble pas apporter grand chose au final (ou alors je vais encore apprendre un truc ? ;o) )
        18:22 <discord_afpy> <aster30999> python c'est comme l'anglais : tu sais le parler jusqu'au moment où tu parles avec des gens qui t'apprennes un tas de trucs du quotidien ... et là tu te dis que tu savais pas en fait
        18:22 <discord_afpy> <aster30999> merci en tout cas pour le topo, j'ai mon info, et bien plus !
        18:24 <entwanne> Mindiell: Non pas du tout, le if ne crée pas de scope
        18:37 <Mindiell> entwanne: ben saypabien !
        18:37 <Mindiell> :)
        18:51 <entwanne> Ouais mais c'est tout le Python qui est comme ça, c'est parfois surprenant mais y a juste class et def qui créent des nouveaux scopes
        19:04 <misc> est ce que c'est le moment de parler de notre lord and savior Rust ?
        19:10 <debnet> D'ailleurs, y a peu de temps je suis tombé sur cet opérateur en Python ",=" ça vous parle ?
        19:10 <debnet> J'avais jamais vu ça.
        19:10 <debnet> Je ne sais d'ailleurs pas trop ce que ça fait.
        19:12 <misc> je suppose que tu va avoir un truc qui renvoie un tuple de 2 elements, et qui oublie le 2eme ?
        19:13 <misc> (ah non)
        19:13 <misc> >>> a,=[1]
        19:13 <misc> >>> a
        19:13 <misc> 1
        19:14 <misc> ça unpack
        19:17 <entwanne> Ouais, `,=` n'existe pas en tant qu'opérateur, mais la virgule à gauche de l'assignation permet l'unpacking
        19:17 <debnet> Ah ouais donc en fait c'est juste que visuellement ça m'a perturbé.
        19:17 <debnet> C'est juste un tuple à gauche de l'opérateur.
        19:18 <debnet> Python est laxiste sur les espaces.
        20:05 <Mindiell> ah oui, et : a,=[1,2,3]
        20:05 <Mindiell> ça plante
        20:05 <Mindiell> logiquement.
        20:05 <Mindiell> a,_,_=[1,2,3] <= hin hin
        22:27 <entwanne> j'utilise souvent le `x, = ...`, parfois de la même manière que j'utiliserais un `next(...)` tout en m'assurant qu'il n'y aura jamais + d'un élément, mais y a des linters qui n'aiment pas et demandent à ce que ce soit écrit `(x,) = ...` :(