[Python] Un generatore che non capisco

Daniele Varrazzo piro a develer.com
Ven 8 Nov 2013 14:13:13 CET


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]

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).

-- Daniele



Maggiori informazioni sulla lista Python