Path: csiph.com!x330-a1.tempe.blueboxinc.net!usenet.pasdenom.info!aioe.org!feeder.news-service.com!newsfeed.xs4all.nl!newsfeed5.news.xs4all.nl!xs4all!post.news.xs4all.nl!not-for-mail Return-Path: X-Original-To: python-list@python.org Delivered-To: python-list@mail.python.org X-Spam-Status: OK 0.128 X-Spam-Level: * X-Spam-Evidence: '*H*': 0.80; '*S*': 0.05; 'suppose': 0.05; 'chose': 0.09; 'global,': 0.09; 'locale': 0.09; 'trouve': 0.09; 'def': 0.15; 'assez': 0.16; 'd\xe9part': 0.16; 'oui,': 0.16; 'peux': 0.16; "qu'il": 0.16; 'r\xe9soudre': 0.16; 'subject:global': 0.16; 'tellement': 0.16; '\xe9crit': 0.16; 'question.': 0.16; 'wrote:': 0.16; 'received:74.125.82.174': 0.19; 'received:mail- wy0-f174.google.com': 0.19; 'to:2**1': 0.20; 'header:In-Reply- To:1': 0.22; "c'est": 0.23; 'variable': 0.24; 'mon': 0.29; 'print': 0.29; 'faire': 0.30; 'merci': 0.30; 'class': 0.30; 'to:addr:python-list': 0.33; 'header:User-Agent:1': 0.34; 'message-id:@gmail.com': 0.34; 'doc': 0.34; 'certain': 0.35; 'received:74.125.82': 0.38; 'question,': 0.38; 'received:google.com': 0.38; 'non': 0.38; 'subject:: ': 0.39; 'to:addr:python.org': 0.39; 'received:74.125': 0.39; 'sans': 0.64; 'plus': 0.65; 'sur': 0.71; 'qui': 0.74; 'dans': 0.77; '10:43,': 0.84; '__call__': 0.84; 'cas,': 0.84; 'contexte': 0.84; 'fichier': 0.84; 'journ\xe9e': 0.84; 'moins': 0.84; 'petite': 0.84; 'subject:local': 0.84; 'veux': 0.84; '\xe9t\xe9': 0.84; "d'une": 0.91; 'mettre': 0.91; 'comme': 0.93; 'tous': 0.93 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject:references :in-reply-to:content-type:content-transfer-encoding; bh=N+zWpOTkdkylEDDXugfYcsvlqMzdfF1ktAElz+JPbrY=; b=uUFiZIuiS5ycVKkR0wAq8XoA5j20HWa+41e3Mxf5xd/lIfC51HpAv9VHBIDYnoQyjz rvkoNhpr97rysFpr5TZh34wLIe3f7heNXLm74fORyyASu+5+ef/D+wm5fHq45R+jFYYe /9Ful4skT3C2IPOVNf8sGtskr260hSqYOEl1M= Date: Fri, 28 Oct 2011 11:29:01 +0200 From: Laurent User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.23) Gecko/20110922 Thunderbird/3.1.15 MIME-Version: 1.0 To: "ll.snark" , Python Subject: Re: Entre local et global References: <7a7f1c9e-7a6e-42b6-8d53-023834f8b1a1@gk10g2000vbb.googlegroups.com> <4EA9736D.7040202@gmail.com> In-Reply-To: Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 8bit X-BeenThere: python-list@python.org X-Mailman-Version: 2.1.12 Precedence: list List-Id: General discussion list for the Python programming language List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Newsgroups: comp.lang.python Message-ID: Lines: 72 NNTP-Posting-Host: 2001:888:2000:d::a6 X-Trace: 1319794145 news.xs4all.nl 6855 [2001:888:2000:d::a6]:50730 X-Complaints-To: abuse@xs4all.nl Xref: x330-a1.tempe.blueboxinc.net comp.lang.python:15098 Le 28/10/2011 10:43, ll.snark a écrit : > On 27 oct, 17:06, Laurent Claessens 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