Ciao,
quando crei una funzione con parametri di default in python, funziona un po' come se l'avessi in realtà dichiarata così (*)

var_0001 = []
def prova(cambia, par):
    if par is None:     
        par = var_0001
        
    if cambia:
        par.append('pippo')
        print("cambiata")
    print(par)

e l'interprete avesse trasformato le chiamate in

prova(False, None)        # []
prova(True, None)         # cambiata \n ['pippo']
prova(False, None)        # ['pippo']



In altre parole, ogni volta che entri nella funzione il parametro /par /viene agganciato alla variabile /var_0001 /e quindi ogni modifica al contenuto di /par /tocca la variabile.
se invece di append metti
par = ['pippo']
invece non modifichi /var_0001/, ma stai semplicemente agganciando par a/['pippo']/ La prossima volta par sarà riagganciato alla variabile originaria e quindi avrai sempre

prova(False, None)        # []
prova(True, None)         # cambiata \n ['pippo']
prova(False, None)        # []

Ciao,
Riccardo
------------------------------------------------------------------------
(*) ovviamente l'interprete non lavora proprio così
_______________________________________________
Python mailing list
Python@lists.python.it
https://lists.python.it/mailman/listinfo/python

Rispondere a