|
|
|
#1 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonsoir,
j'ai défini une fonction dont le premier argument attendu est une méthode d'instance. Tout fonctionnait nickel jusqu'au moment ou j'ai été confronté au cas ou la méthode passée en argument a elle-même besoin de pas mal d'arguments (nommés). Je me suis dis "pas de problème, j'ai repéré la fonction qui va bien, à savoir apply()".... Sauf que l'utilisation de apply() est déconseillée. D'un autre coté il me semble avoir lu je ne sais plus ou (un document qui ressemble à la PEP8) que les protos de fonctions/méthodes avec *args et **kwargs étaient à éviter à la faveur d'arguments positionnels et/ou nommés explicites. La question est donc très simple: est ce que j'utilise apply() dans ma fonction ou est ce que je modifie le proto de mes méthodes avec **kwargs comme argument (beurk!) ? Merci pour vos éclairages, Laurent |
|
|
|
#2 (permalink) |
|
Messages: n/a
Hébergeur: |
Bruno Desthuilliers a écrit :
> Cémoi a écrit : >> Bonsoir, >> >> j'ai défini une fonction dont le premier argument attendu est une >> méthode d'instance. >> Tout fonctionnait nickel jusqu'au moment ou j'ai été confronté au cas ou >> la méthode passée en argument a elle-même besoin de pas mal d'arguments >> (nommés). >> Je me suis dis "pas de problème, j'ai repéré la fonction qui va bien, à >> savoir apply()".... > > deprecated > >> Sauf que l'utilisation de apply() est déconseillée. > > !-) > >> D'un autre coté il me semble avoir lu je ne sais plus ou (un document >> qui ressemble à la PEP8) que les protos de fonctions/méthodes avec *args >> et **kwargs étaient à éviter à la faveur d'arguments positionnels et/ou >> nommés explicites. >> La question est donc très simple: est ce que j'utilise apply() dans ma >> fonction ou est ce que je modifie le proto de mes méthodes avec **kwargs >> comme argument (beurk!) ? > > Ni l'un ni l'autre... Par contre, relire la doc et faire quelques > essais, ça peut être un bon début !-) prout ;o) > > class MaClasse(object): > def __init__(self, name): > self.name = name > > def fait_ceci(self, toto, tata=42): > print "%s (name=%s) called with toto=%s and tata=%s" \ > % (self, self.name, toto, tata) > > > def fonction(meth, *args, **kw): > return meth(*args, **kw) Ca ne m'était tout simplement pas venu à l'esprit (tout perturbé que j'étais à l'idée de refaire tous les protos de mes belles méthodes ... ;o) Pour rebondir sur tes conseils de relecture de docs et d'essais (une petite demi-heure* tous les matins de "gym" me fait le plus grand bien), je dirai que je me retrouve quand même avec des **kwargs (héhé). > > obj = MaClasse('machin') > fonction(obj.fait_ceci, 'yo', 33) > > >> Merci pour vos éclairages, > > De rien... Si, si, grand merci, en plus t'as parfaitement capté (correctement du premier coup mes besoins, pas forcément exprimés avec la terminologieadéquate .... * tiens, je vais me relire la PEP8, ça peut pas faire de mal |
|
|
|
#3 (permalink) |
|
Messages: n/a
Hébergeur: |
Bonjour !
Y a-t'il une (bonne) raison, pour ne pas appeler la fonction "Apply" ? def Apply(meth, *args, **kw): return meth(*args, **kw) obj = MaClasse('machin') Apply(obj.fait_ceci, 'yo', 33) (ou apply2, applyBD, appli, aïe, ...) ou simplement apply, et en l'incluant dans le builtin. @+ MCI |
|
![]() |
| Outils de la discussion | |
|
|