[Python] Questo, da Python, non me lo sarei mai aspettato
Daniele Zambelli
daniele.zambelli a gmail.com
Lun 12 Feb 2024 00:09:55 CET
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
<federico a 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.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
>
--
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?
Maggiori informazioni sulla lista
Python