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

_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a