[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