[Python] Un generatore che non capisco

Pietro Battiston me a pietrobattiston.it
Ven 8 Nov 2013 15:54:52 CET


Il giorno ven, 08/11/2013 alle 13.13 +0000, Daniele Varrazzo ha scritto:
> On 2013-11-08 12:43, Pietro Battiston wrote:
> 
> > Giusto per curiosità, questo fatto che il parsing degli argomenti di
> > default non avvenga a runtime lo definireste un inconveniente tecnico
> > con cui si può sopravvivere tranquillamente (fare altrimenti
> > richiederebbe, in parole povere, uno scope in più?) o una feature?
> 
> È una feature utile in diversi casi. Simula le variabili statiche del c 
> per esempio: spesso uso un parametro "nascosto" come cache privata.
> 
>      def calcolone(_result=[]):
>          if _result:
>              return _result[0]
>          _result.append(<qualcosa che richiede tempo>)
>          return _result[0]
> 

Uh. Privata davvero! Ma è questo il motivo per cui lo fai (invece che
dichiarare _result come attributo della classe)?! O anche qui (come dici
sotto) c'è un discorso di efficienza?


> o per avere variabili locali:
> 
>      def lookup(arg, _dict={'a': 1, 'b': 2, ...}):
>          return _dict[arg]
> 
>      def parse(str, _rex=re.compile('some regexp'))
>          return _rex.match(str)
> 
> Preferisco le variabili locali perchè 1. sono private e 2. sono più 
> efficienti delle globali.
> 
> Un caso di uso più articolato riguarda le chiusure lessicali e torna 
> comodo quando si usa Python in maniera funzionale. L'ho descritta qui 
> qualche anno fa: 
> <http://stackoverflow.com/questions/233673/lexical-closures-in-python> 
> (vedi la risposta più upvotata).

Chiaro... grazie!

Pietro



Maggiori informazioni sulla lista Python