Entre local et global

Laurent moky.math at gmail.com
Fri Oct 28 05:29:01 EDT 2011


Le 28/10/2011 10:43, ll.snark a écrit :
> On 27 oct, 17:06, Laurent Claessens<moky.m... at 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



More information about the Python-list mailing list