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