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 _______________________________________________ Python mailing list Python@lists.python.it https://lists.python.it/mailman/listinfo/python