Mi pare di avere capito, ma continua a risultarmi strano questo comportamento:
def prova(par='pippo'): print(par) prova('pluto') # pluto prova() # pippo def prova(par=['pippo']): print(par) prova(['pluto']) # ['pluto'] prova() # ['pippo'] def prova(par=['pippo']): if par == ['pippo']: par = ['pluto'] print(par) prova() # ['pluto'] prova() # ['pluto'] Se il valore della variabile viene cambiata al momento della chiamata della funzione, il valore di default rimane, se viene cambiata dalla funzione stessa il valore di default cambia in tutte le chiamate successive. Grazie, ciao. Il giorno dom 11 feb 2024 alle ore 18:12 Federico Fissore <feder...@fissore.org> ha scritto: > > Ciao > > Result é locale alla funzione ma il suo valore di default no: quel [] è una > lista definita a livello di funzione, quindi definita una volta e condivisa > da ogni invocazione. > Se vuoi evitare sorprese, usa none come valore di default, e nella funzione > metti > If result is none: > result = [] > > Ciao > > Federico > > > > > On 11 Feb 2024, at 16:32, Daniele Zambelli <daniele.zambe...@gmail.com> > > wrote: > > Stavo studiando degli algoritmi per produrre la lista delle > > permutazioni di una sequenza, ho modificato una funzione che ho > > trovato su stackoverflow e mi sono imbattuto in un comportamento molto > > strano (per me). > > Lo script è questo: > > > > def permutazioni1(head, tail='', result=[]): > > if len(head) == 0: > > result.append(tail) > > else: > > for i in range(len(head)): > > permutazioni1(head[:i] + head[i+1:], tail + head[i]) > > else: > > return(result) > > > > print(permutazioni1("abc")) > > > > print('---------------------') > > > > print(permutazioni1("def")) > > > > Io mi aspettavo che il parametro "result" fosse locale alla funzione > > "permutazioni1" e che non mantenesse il suo contenuto tra una chiamata > > e l'altra della funzione il risultato dello script è: > > > > ['abc', 'acb', 'bac', 'bca', 'cab', 'cba'] > > --------------------- > > ['abc', 'acb', 'bac', 'bca', 'cab', 'cba', 'def', 'dfe', 'edf', 'efd', > > 'fde', 'fed'] > > > > Probabilmente non è il modo corretto per ottenere la lista delle > > permutazioni, ma qualcuno sa spiegarmi perché si comporta così e come > > eventualmente correggerlo? > > > > Grazie, da una domenica uggiosa. > > > > -- > > > > Daniele > > > > www.matematicadolce.eu > > > > Perché la scuola, > > invece di essere un luogo dove ci si allena a imparare, > > è un luogo dove si fa finta di sapere? > > _______________________________________________ > > Python mailing list > > Python@lists.python.it > > https://lists.python.it/mailman/listinfo/python > -- Daniele www.matematicadolce.eu Perché la scuola, invece di essere un luogo dove ci si allena a imparare, è un luogo dove si fa finta di sapere? _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python