[Python] Questo, da Python, non me lo sarei mai aspettato
Federico Fissore
federico a fissore.org
Dom 11 Feb 2024 18:12:18 CET
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.zambelli a 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 a lists.python.it
> https://lists.python.it/mailman/listinfo/python
Maggiori informazioni sulla lista
Python