Pour limiter les instructions, lors d'une utilisation massive de
callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre :
def void(*param):
pass
Mais cela cela entraînerait la création d'un espace de noms, des
affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Pour limiter les instructions, lors d'une utilisation massive de callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass Mais cela cela entraînerait la création d'un espace de noms, des affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de bord" que définir une fonction avec def ? J'imagine que c'est le cas ...
class Void: def __call__(self, *args): pass none = Void() print none("pas de troll aujourd'hui") None
print reduce(none, range(10)) None
@+
Laurent
@+
Michel Claveau
Bonsoir !
Pour limiter les instructions, lors d'une utilisation massive de
callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass
Mais cela cela entraînerait la création d'un espace de noms, des
affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de
bord" que définir une fonction avec def ?
J'imagine que c'est le cas ...
class Void:
def __call__(self, *args):
pass
none = Void()
print none("pas de troll aujourd'hui")
None
Pour limiter les instructions, lors d'une utilisation massive de callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass Mais cela cela entraînerait la création d'un espace de noms, des affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de bord" que définir une fonction avec def ? J'imagine que c'est le cas ...
class Void: def __call__(self, *args): pass none = Void() print none("pas de troll aujourd'hui") None
print reduce(none, range(10)) None
@+
Laurent
@+
Michel Claveau
NicolasP
Certes, pour l'instant, j'utilise un if callback: callback(..., ...., ....
Mais, une instruction gagnée, c'est une instruction gagnée ! (merci, monsieur de Lapalisse).
Si le test n'est pas dans ton code, c'est l'interpréteur qui le fera. Il faut bien qu'il soit quelquepart ce test. Même si l'interpréteur peut le faire en interne plus efficacement, est-ce que la différence sera sensible ?
Nicolas
Certes, pour l'instant, j'utilise un
if callback: callback(..., ...., ....
Mais, une instruction gagnée, c'est une instruction gagnée ! (merci,
monsieur de Lapalisse).
Si le test n'est pas dans ton code, c'est l'interpréteur qui le fera. Il faut bien qu'il soit quelquepart ce test.
Même si l'interpréteur peut le faire en interne plus efficacement, est-ce que la différence sera sensible ?
Certes, pour l'instant, j'utilise un if callback: callback(..., ...., ....
Mais, une instruction gagnée, c'est une instruction gagnée ! (merci, monsieur de Lapalisse).
Si le test n'est pas dans ton code, c'est l'interpréteur qui le fera. Il faut bien qu'il soit quelquepart ce test. Même si l'interpréteur peut le faire en interne plus efficacement, est-ce que la différence sera sensible ?
Nicolas
Bruno Desthuilliers
Bonsoir !
quand j'y pense, y aurait éventuellement matière à un PEP.
OK, mais un PEP, c'est en anglais... Alors, si tu te sens, vas-y (ou, plutôt, Go! ) Mais perso, c'est largement au-delà de mes capacités épistolaires-zé-linguistiques.
C'est toi qui est demandeur, c'est toi qui rédige !-)
Après, je veux bien traduire...
Bonsoir !
quand j'y pense, y aurait éventuellement matière à un PEP.
OK, mais un PEP, c'est en anglais...
Alors, si tu te sens, vas-y (ou, plutôt, Go! )
Mais perso, c'est largement au-delà de mes capacités
épistolaires-zé-linguistiques.
C'est toi qui est demandeur, c'est toi qui rédige !-)
quand j'y pense, y aurait éventuellement matière à un PEP.
OK, mais un PEP, c'est en anglais... Alors, si tu te sens, vas-y (ou, plutôt, Go! ) Mais perso, c'est largement au-delà de mes capacités épistolaires-zé-linguistiques.
C'est toi qui est demandeur, c'est toi qui rédige !-)
Après, je veux bien traduire...
Bruno Desthuilliers
Bonsoir !
Pour limiter les instructions, lors d'une utilisation massive de callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass Mais cela cela entraînerait la création d'un espace de noms, des affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de bord" que définir une fonction avec def ?
Je ne suis pas sûr de ce que tu veux dire par "effet de bord", mais pour info, une fonction est une instance de la classe "function", laquelle implémente la méthode __call__.
def toto(): print "toto" ...
toto.__call__ <method-wrapper '__call__' of function object at 0xb78e20d4>
toto.__call__() toto
Bonsoir !
Pour limiter les instructions, lors d'une utilisation massive de
callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass
Mais cela cela entraînerait la création d'un espace de noms, des
affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de
bord" que définir une fonction avec def ?
Je ne suis pas sûr de ce que tu veux dire par "effet de bord", mais pour
info, une fonction est une instance de la classe "function", laquelle
implémente la méthode __call__.
def toto(): print "toto"
...
toto.__call__
<method-wrapper '__call__' of function object at 0xb78e20d4>
Pour limiter les instructions, lors d'une utilisation massive de callbacks, je cherche une fonction "None".
Certes, je pourrais faire un truc du genre : def void(*param): pass Mais cela cela entraînerait la création d'un espace de noms, des affectations de noms aux paramètres, etc.
J'aurais aimé une pseudo fonction qui évite même l'appel.
Si quelqu'un a une idée...
Est ce que la méthode de classe spéciale __call__ a les même "effets de bord" que définir une fonction avec def ?
Je ne suis pas sûr de ce que tu veux dire par "effet de bord", mais pour info, une fonction est une instance de la classe "function", laquelle implémente la méthode __call__.
def toto(): print "toto" ...
toto.__call__ <method-wrapper '__call__' of function object at 0xb78e20d4>
toto.__call__() toto
Bruno Desthuilliers
'soir !
Avec lambda ?
Là, j'ai des doutes sur l'efficacité de lambda.
lambda crée un objet function tout à fait ordinaire.
'soir !
Avec lambda ?
Là, j'ai des doutes sur l'efficacité de lambda.
lambda crée un objet function tout à fait ordinaire.
Le Tue, 25 Mar 2008 17:23:12 +0000, Laurent Pointal a écrit :
Le Tue, 25 Mar 2008 14:49:33 +0100, Bruno Desthuilliers a écrit :
'soir !
Avec lambda ?
Là, j'ai des doutes sur l'efficacité de lambda.
lambda crée un objet function tout à fait ordinaire.
Et... anonyme.
Par contre, pour le nombre variable d'arguments, je ne sais pas si ça le fait.
Ben si:
f = lambda *x: sum(x) f(1,3,4) 8
Et avec les arguments nommés aussi:
g = lambda *x,**y: 0
g(213342,toto=4) 0
-- Laurent POINTAL -
Laurent Pointal
Le Tue, 25 Mar 2008 17:35:09 +0000, Laurent Pointal a écrit :
<zip>
Ceci dit, utiliser ça de façon intensive, ça crée de multiples exemplaires d'une fonction anonyme qui ne fait rien (mais qui occupe quand même sa définition)... pas sûr que ça soit plus efficace que la définition d'une NoneFct et son utilisation partout où en a en besoin.
Est-ce que Michel est à 1 (un) nom prêt ?
-- Laurent POINTAL -
Le Tue, 25 Mar 2008 17:35:09 +0000, Laurent Pointal a écrit :
<zip>
Ceci dit, utiliser ça de façon intensive, ça crée de multiples
exemplaires d'une fonction anonyme qui ne fait rien (mais qui occupe
quand même sa définition)... pas sûr que ça soit plus efficace que la
définition d'une NoneFct et son utilisation partout où en a en besoin.
Le Tue, 25 Mar 2008 17:35:09 +0000, Laurent Pointal a écrit :
<zip>
Ceci dit, utiliser ça de façon intensive, ça crée de multiples exemplaires d'une fonction anonyme qui ne fait rien (mais qui occupe quand même sa définition)... pas sûr que ça soit plus efficace que la définition d'une NoneFct et son utilisation partout où en a en besoin.
Est-ce que Michel est à 1 (un) nom prêt ?
-- Laurent POINTAL -
Laurent Pointal
Le Tue, 25 Mar 2008 22:06:49 +0100, Méta-MCI (MVP) a écrit :
Bonsoir !
nom prêt ?
Pas d' a priori ; mais, c'est pas les idées qui manquent : None() none() void() null() nf() (Non Fonction) chirac() (qq chose que ne fait (plus) rien) zero() blank() vacuum() nothing() java() (qq chose qui vaut 'null')
Perso, j'aime bien NoneFct().
-- Laurent POINTAL -
Le Tue, 25 Mar 2008 22:06:49 +0100, Méta-MCI (MVP) a écrit :
Bonsoir !
nom prêt ?
Pas d' a priori ; mais, c'est pas les idées qui manquent :
None() none() void() null() nf() (Non Fonction) chirac() (qq
chose que ne fait (plus) rien) zero() blank() vacuum() nothing()
java() (qq chose qui vaut 'null')
Le Tue, 25 Mar 2008 22:06:49 +0100, Méta-MCI (MVP) a écrit :
Bonsoir !
nom prêt ?
Pas d' a priori ; mais, c'est pas les idées qui manquent : None() none() void() null() nf() (Non Fonction) chirac() (qq chose que ne fait (plus) rien) zero() blank() vacuum() nothing() java() (qq chose qui vaut 'null')
Perso, j'aime bien NoneFct().
-- Laurent POINTAL -
Laurent Pointal
Le Wed, 26 Mar 2008 11:07:13 +0100, Bruno Desthuilliers a écrit :
A y re-réfléchir, et bien que l'idée reste intéressante, il y a aussi un truc qui me dérange un peu dans l'idée, c'est le fait d'avoir la sémantique d'un appel mais pas d'appel. Ca rompt l'uniformité, et ça contredit le "special cases are not special enough to break the rules".
Heu, il y a la sémantique d'un appel, et il y a un appel effectif, sauf que le code ne fait rien ou presque. Mais un appel qui ne fait rien multiplié par beaucoup, ça peut devenir onéreux. Peut-être que parfois un simple if fct is not None : fct(xxx) est plus efficace et sémantiquement clair
Bon, si tu veux pouvoir trimbaler la fonction à droite ou à gauche et la passer à d'autres morceaux de code qui ne savent pas qu'elle peut être à None, en effet il vaut mieux supporter la sémantique de l'appel.
A+
Laurent.
-- Laurent POINTAL -
Le Wed, 26 Mar 2008 11:07:13 +0100, Bruno Desthuilliers a écrit :
A y re-réfléchir, et bien que l'idée reste intéressante, il y a aussi un
truc qui me dérange un peu dans l'idée, c'est le fait d'avoir la
sémantique d'un appel mais pas d'appel. Ca rompt l'uniformité, et ça
contredit le "special cases are not special enough to break the rules".
Heu, il y a la sémantique d'un appel, et il y a un appel effectif, sauf
que le code ne fait rien ou presque. Mais un appel qui ne fait rien
multiplié par beaucoup, ça peut devenir onéreux.
Peut-être que parfois un simple
if fct is not None : fct(xxx)
est plus efficace et sémantiquement clair
Bon, si tu veux pouvoir trimbaler la fonction à droite ou à gauche et la
passer à d'autres morceaux de code qui ne savent pas qu'elle peut être à
None, en effet il vaut mieux supporter la sémantique de l'appel.
Le Wed, 26 Mar 2008 11:07:13 +0100, Bruno Desthuilliers a écrit :
A y re-réfléchir, et bien que l'idée reste intéressante, il y a aussi un truc qui me dérange un peu dans l'idée, c'est le fait d'avoir la sémantique d'un appel mais pas d'appel. Ca rompt l'uniformité, et ça contredit le "special cases are not special enough to break the rules".
Heu, il y a la sémantique d'un appel, et il y a un appel effectif, sauf que le code ne fait rien ou presque. Mais un appel qui ne fait rien multiplié par beaucoup, ça peut devenir onéreux. Peut-être que parfois un simple if fct is not None : fct(xxx) est plus efficace et sémantiquement clair
Bon, si tu veux pouvoir trimbaler la fonction à droite ou à gauche et la passer à d'autres morceaux de code qui ne savent pas qu'elle peut être à None, en effet il vaut mieux supporter la sémantique de l'appel.