Le 28/10/2011 10:43, ll.snark a écrit :
On 27 oct, 17:06, Laurent Claessens<moky.m...@gmail.com>  wrote:
 >  J'aimerais donc pouvoir indiquer dans fonca, que la variable lst est
 >  celle définie dans fonc1.
 >  Je ne veux pas d'une variable locale à fonca, ni une variable globale
 >  à tout mon fichier (cf exemple ci-dessous)

 >  Une idée ?

 Je ne suis pas très sûr que ça réponse à la question, mais une piste
 serait de faire de fonca une classe avec une méthode __call__ et une
 variable de classe:

 class fonc2(object):
       fonc1.lst=[]
       def __call__(self,v):
           if len(fonc1.lst)<3:
               fonc1.lst=fonc1.lst+[v]
           print fonc1.lst



Effectivement, ça répond en partie à la question.
Il faudra que je vois si en faisant comme ça, je peux résoudre mon pb
de départ sur les décorateurs. MAis je suppose qu'entre une fonction
et une classe qui possède une
méthode __call__, il n'y a pas tant de différence que ça...


Moi je dirais que oui, il y a une différence énorme : dans une classe tu peux mettre beaucoup plus de choses ;)

class Exemple(object):
    def __init__(self,a):
        self.a=a
    def __call__(self,x):
        return a+x

f=Exemple(2)
g=Exemple(10)

f(1) # 3
g(1) # 11
f.a=6
f(1) # 7

Faire ça avec une fonction, ça me semblerait ardu, sauf à faire comme tu faisais : une fonction qui contient une fonction et qui la retourne. (mais à mon avis c'est moins lisible)

Merci pour la réponse en tous cas. Je suppose donc qu'il n'y a pas de
mot clé, un peu comme global, mais qui
désigne une portée plus petite ?

Je ne sais pas.


Je l'aurais sans doute vu dans la doc
ou dans des bouquin si ça avait été le cas, mais je trouve
que c'est bizarre.

A priori, ça ne me semble pas tellement bizarre. J'utiliserais une fonction seulement pour quelque chose qui a une entrée et une sortie qui dépend uniquement de l'entrée. Pour quelque chose dont le comportement dépend du contexte (c'est le cas de ce que tu demandes), j'utiliserais une classe dans les attributs de laquelle je mettrais les éléments du contexte. Bon, je dis ça, mais je ne suis pas assez fort pour prétendre être certain de ce qui est "bizarre" ou non :)

Bonne journée
Laurent
--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to