Comments on: Comprendre les décorateurs Python pas à pas (partie 2) http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/ Du code, du cul Sat, 07 Nov 2015 11:08:18 +0000 hourly 1 http://wordpress.org/?v=4.1 By: Anne Onyme http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-164146 Sat, 29 Aug 2015 13:44:16 +0000 http://sametmax.com/?p=683#comment-164146 Comme pour les autres dépoussiérages, voici les quelques erreurs que j’ai repérées:

* “en lui passant des paramètres” -> “en lui passant des arguments” (cf. http://sametmax.com/la-difference-entre-parametres-et-arguments/);

* “L’autocompletion” -> “L’autocomplétion”;

* “contient maitenant” -> “contient maintenant”;

* “Fonction avec arguments” -> “Fonction avec paramètres” (je sais, je fais chier)? Dans ce titre, on parle de la définition de la fonction, donc de paramètres, non?;

* “J’ai des arguments regarde” -> “J’ai des arguments, regarde” (la virgule^^) (dans le code et dans les commentaires);

* “à la fonctions décorée” -> “à la fonction décorée”;

* “éxécuté” / “éxécuter” -> “exécuté” / “exécuter” (10 fois);

* “En fait ce decorateur” -> “En fait ce décorateur”;

* “quand on décore la )fonction” -> “quand on décore la fonction” (dans le code uniquement);

* “Je créé des décorateur” -> “Je créé des décorateurs” (dans le code uniquement);

* “les variables intermédiares” -> “les variables intermédiaires”;

* “ça aiderait quand même….” -> “ça aiderait quand même…”;

* “débugger” -> “déboguer”.

]]>
By: Oliverpool http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-164083 Wed, 26 Aug 2015 17:52:18 +0000 http://sametmax.com/?p=683#comment-164083

Un compter qui compte et affiche le nombre de fonction qu’une fonction

Un peu trop de copier/coller ;-)

Un compte*u*r qui compte et affiche le nombre de fo*is* qu’une fonction

(d’ailleur “un compteur qui compte” c’est pas très orginal^^)

]]>
By: Sam http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-163613 Wed, 29 Jul 2015 17:23:03 +0000 http://sametmax.com/?p=683#comment-163613 Il existe plusieurs libs qui taclent ce problème et bien plus si on a besoin de faire complexe mais propre : https://pypi.python.org/pypi?%3Aaction=search&term=decorator&submit=search

]]>
By: Anb http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-163611 Wed, 29 Jul 2015 15:59:45 +0000 http://sametmax.com/?p=683#comment-163611

Mais attention, si vous acceptez *args, **kwargs, la liste des arguments ne sera plus disponible pour l’introspection. C’est quelque chose que @wraps ne peut pas changer. La plupart du temps, c’est un compromis acceptable.

Compromis acceptable, sauf si l’on génère sa doc avec Sphinx.

J’étais assez triste de voir toutes mes méthodes décorées prendre *args, **kwargs comme arguments du coup.

Et puis je suis tombé sur ce snippet qui permet de dewrapper le wrapper (si on utilise functools.wraps):

http://stackoverflow.com/a/28371786

Ouf !

]]>
By: Marc http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-90645 Wed, 09 Jul 2014 21:27:19 +0000 http://sametmax.com/?p=683#comment-90645 Un grand merci!

]]>
By: Sam http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-90612 Wed, 09 Jul 2014 20:52:15 +0000 http://sametmax.com/?p=683#comment-90612
@decorateur 
def fonction()

Va faire :

fonction = decorateur(fonction)

Alors que

@decorateur()
def fonction()

Va faire :

fonction = decorateur()(fonction)

On a un niveau de plus d’imbrication de wrapper, et donc de fonctions dynamiquement créés. C’est comme inception, c’est plus compliqué quand on rajoute des couches.

Note qu’un décorateur qui doit être appelé ne s’écrit pas pareil, puisqu’il doit retourner une fonction qui doit retourner une fonction.

]]>
By: Marc http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-90598 Wed, 09 Jul 2014 20:34:47 +0000 http://sametmax.com/?p=683#comment-90598 Salut,

Je vois cette ligne:

Vous noterez qu’on a utilisé la notation @, avec un appel de fonction: @createur_de_decorateur() et non @createur_de_decorateur !

Salut , je ne comprends pas ce que ca change? j’ai essayé sans et ca na marche pas mais je ne comprends pas du tout pourquoi

merci

]]>
By: Sam http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-44626 Sat, 07 Jun 2014 09:50:34 +0000 http://sametmax.com/?p=683#comment-44626 Ah ok. Merci, je corrige.

]]>
By: Moato http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-44572 Sat, 07 Jun 2014 08:49:08 +0000 http://sametmax.com/?p=683#comment-44572 Hello je reprend ce qu’a essayer de dire Jerome: “ablE sanana snob port ed etrop bons anan aS” n’est pas l’inverse de “Karine alla en Irak”

]]>
By: Sam http://sametmax.com/comprendre-les-decorateur-python-pas-a-pas-partie-2/#comment-21394 Mon, 17 Mar 2014 10:30:47 +0000 http://sametmax.com/?p=683#comment-21394 @Syl: je suis désolé man, j’ai jamais répondu à ce com, et je le revoie juste maintenant. Bon, il est sans doute trop tard mais…

Les deux examples ont deux raison différentes de ne pas fonctionner.

Le premier c’est que les types de bases sont protégés contre les modifications. Quand je dis protégés, c’est pas non plus un coffre fort puisqu’avec un peu d’astuce on peut le faire, mais ça évite de le faire par erreur. C’est notament pour éviter des mauvaises pratiques comme le monkey patching des types de base qu’on peut voir en ruby et javascript et qui entrainent après des casse-tête de debug quand 2 libs le font.

Le second exemple ne fonctionne pas car tu essaye de LIRE un attribut qui n’existe pas encore dans ton if. Ca ne marche sur AUCUN objet en Python. Par contre, tu peux parfaitement initialiser ton attribut à une valeur avant ta condition, et ça marchera. Les fonctions peuvent avoir des attributs arbitraires en Python, on s’en sert beaucoup dans les décorteurs, par exemple je l’utilise avec django quicky.

@goearges : merci

]]>