Ciao no, l'ultima funzione sta rivalorizzando `par` ogni volta. Cambiala così e riesegui
def prova(par=['pippo']): if par == ['pippo']: print("cambiata") par = ['pluto'] print(par) ciao federico ---- On Mon, 12 Feb 2024 00:09:55 +0100 Daniele Zambelli wrote --- > 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 > _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python