Variabili che non si resettano

s
stefan9 (400 points)
2 7 11
asked Apr 5, 2018 in Programmare in Python by stefan9 (400 points)
closed May 27, 2018 by andrea.sterbini

Buona sera

Stavo esercitandomi con l'esame del 15 febbraio e in particolare con il primo esercizio.

Ho riscontrato questo problema.

Quando faccio partire il grade, il primo test mi da l'Ok mentre il secondo test sempre del primo esercizio mi da un risultato non corretto. E come risultato mi da , in pratica, la somma dei due dizionari. Ovvero come se il Dizionario non fosse stato cancellato/resettato all'inizio della test. Ho ovviato al problema con un if , ma mi chiedevo perchè non venisse resettato il dizionario all'inizio del Test.

Il codice ovviamente è ricorsivo, nella definizione della funzione , originalmente era  def es1(dir, estensioni), io ho apportato questa modifica def es1(dir, estensioni,dic={},h = 0), e credo che il problema sia questo.

In caso posso postare il Codice dell'esercizio ?

Grazie in anticipo per la pazienza

221 views
closed with note: scoperto-l-arcano

1 Answer

andrea.sterbini (172780 points)
514 935 1789
answered Apr 8, 2018 by andrea.sterbini (172,780 points)
edited May 27, 2018 by andrea.sterbini
Ho trovato il motivo.

Python calcola i valori di default al momento in cui la funzione viene definita e non al momento in cui viene usata.

Questo non crea problemi quando i valori di default sono IMMUTABILI (numeri, stringhe, tuple).

Quando invece sono MUTABILI (liste, dizionari, oggetti) è come se aveste definito una variabile globale, che non si resetta come invece vi aspettereste.